三次元配列は「層 × 行 × 列」でデータを管理できるので、複数の盤面や立体的なゲームを表現するのに使えます。ここでは、初心者でも理解しやすいように ゲーム盤を三次元配列で扱う練習問題を用意しました。すべてに 解答例と解説 をつけています。
基礎編(1〜3)
問題1:3Dゲーム盤の作成
2層 × 3行 × 3列の盤を作り、すべてのマスに 0 を代入して表示してください。
解答例
int[][][] board = new int[2][3][3];
for (int layer = 0; layer < board.length; layer++) {
System.out.println("層 " + layer + ":");
for (int row = 0; row < board[layer].length; row++) {
for (int col = 0; col < board[layer][row].length; col++) {
board[layer][row][col] = 0;
System.out.print(board[layer][row][col] + " ");
}
System.out.println();
}
}
Java解説
「層」を外側ループ、「行」を中ループ、「列」を内ループで回す。
問題2:駒を置く
上の盤の「層1・行2・列0」に 1 を代入して表示してください。
解答例
board[1][2][0] = 1;
System.out.println(board[1][2][0]); // 1
Java解説
インデックスは [層][行][列]。駒を置く位置を指定できる。
問題3:盤面のサイズを表示
盤の「層数」「行数」「列数」を表示してください。
解答例
System.out.println("層数: " + board.length);
System.out.println("行数: " + board[0].length);
System.out.println("列数: " + board[0][0].length);
Java応用編(4〜7)
問題4:駒の数を数える
盤に 1 がいくつ置かれているか数えて表示してください。
解答例
int count = 0;
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
for (int k = 0; k < board[i][j].length; k++) {
if (board[i][j][k] == 1) {
count++;
}
}
}
}
System.out.println("駒の数: " + count);
Java問題5:層ごとの駒数
各層に置かれた駒の数を表示してください。
解答例
for (int i = 0; i < board.length; i++) {
int layerCount = 0;
for (int j = 0; j < board[i].length; j++) {
for (int k = 0; k < board[i][j].length; k++) {
if (board[i][j][k] == 1) {
layerCount++;
}
}
}
System.out.println("層 " + i + " の駒数: " + layerCount);
}
Java問題6:勝利判定(横一列)
ある層の行に同じ値(例:全部1)が並んだら「勝ち」と表示してください。
解答例
for (int layer = 0; layer < board.length; layer++) {
for (int row = 0; row < board[layer].length; row++) {
boolean win = true;
for (int col = 0; col < board[layer][row].length; col++) {
if (board[layer][row][col] != 1) {
win = false;
break;
}
}
if (win) {
System.out.println("層 " + layer + " 行 " + row + " が勝ち!");
}
}
}
Java問題7:立体的な勝利判定(縦列)
同じ列番号で全層に同じ値が並んだら「勝ち」と表示してください。
解答例
for (int row = 0; row < board[0].length; row++) {
for (int col = 0; col < board[0][row].length; col++) {
boolean win = true;
for (int layer = 0; layer < board.length; layer++) {
if (board[layer][row][col] != 1) {
win = false;
break;
}
}
if (win) {
System.out.println("列 (" + row + "," + col + ") が立体的に勝ち!");
}
}
}
Java発展編(8〜10)
問題8:ランダム配置
盤にランダムで 1 を10個置いて表示してください。
解答例
java.util.Random rand = new java.util.Random();
for (int n = 0; n < 10; n++) {
int layer = rand.nextInt(board.length);
int row = rand.nextInt(board[0].length);
int col = rand.nextInt(board[0][0].length);
board[layer][row][col] = 1;
}
Java問題9:立体的な斜め判定
層・行・列が同じ番号の要素(例:board[0][0][0], board[1][1][1], ...)が全部同じ値なら「勝ち」と表示してください。
解答例
boolean win = true;
for (int i = 0; i < board.length; i++) {
if (board[i][i][i] != 1) {
win = false;
break;
}
}
if (win) {
System.out.println("立体斜めラインが勝ち!");
}
Java問題10:拡張for文で表示
拡張for文を使って盤の全要素を表示してください。
解答例
for (int[][] layer : board) {
for (int[] row : layer) {
for (int value : row) {
System.out.print(value + " ");
}
System.out.println();
}
System.out.println("---");
}
Java✅まとめ
- 基礎編: 作成・代入・サイズ確認
- 応用編: 駒数・勝利判定(横・縦)
- 発展編: ランダム配置・斜め判定・拡張for文
三次元配列をゲーム盤として扱うと、立体的な○×ゲーム(3D Tic-Tac-Toe) のような応用が可能になります。


