Java | 三次元配列でゲーム盤を表す練習問題

Java Java
スポンサーリンク

三次元配列は「層 × 行 × 列」でデータを管理できるので、複数の盤面や立体的なゲームを表現するのに使えます。ここでは、初心者でも理解しやすいように ゲーム盤を三次元配列で扱う練習問題を用意しました。すべてに 解答例と解説 をつけています。


基礎編(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) のような応用が可能になります。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました