Javaにおける二次元配列の活用

二次元配列の基本

二次元配列は、一次元配列を要素として持つ配列であり、表形式のデータ構造として扱われます。行と列の概念を持ち、行列演算やゲームボードの管理など、複数の応用シーンで利用されます。

二次元配列の宣言方法

以下のようにして二次元配列を宣言および初期化できます。

// 行と列のサイズを指定
int[][] data = new int[3][4];

// 行ごとに列を個別に割り当て
int[][] data = new int[3][];
data[0] = new int[4];
data[1] = new int[4];
data[2] = new int[4];

// 初期値を直接代入
int[][] data = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

五目並べにおける応用例

五目並べのボードは、二次元配列を使って表現するのが自然です。各マスに置かれた石の状態を記録することで、重複配置のチェックや勝敗判定を行うことができます。

public int[][] board = new int[size][size];
// sizeはボードの縦横のマス数
// 初期値は0で、1は黒石、2は白石を示す
// chessXとchessYはクリック座標から算出された位置
if (board[chessY][chessX] != 0) {
    JOptionPane.showMessageDialog(null, "すでに石が置かれています");
    return;
}

勝敗判定の実装

横方向と斜め方向を調べて、同一色の石が5つ連続しているかを確認します。縦方向や他の斜め方向の判定は同様のロジックで実装可能です。

public void mouseClick(MouseEvent e) {
    int moveCount = 0;
    int x = e.getX();
    int y = e.getY();

    if (moveCount % 2 == 0) {
        stoneColor = Color.BLACK;
        board[gridY][gridX] = 1;
    } else {
        stoneColor = Color.WHITE;
        board[gridY][gridX] = 2;
    }
    moveCount++;
}

左右方向のチェック

以下は、現在の石を中心に左右方向に連続する石を確認する処理です。

public int checkHorizontal() {
    int count = 0;

    // 左方向を確認
    for (int i = gridX; i >= 0; i--) {
        if (board[gridY][i] == board[gridY][gridX]) {
            count++;
        } else {
            break;
        }
    }

    // 右方向を確認
    for (int i = gridX + 1; i < board.length; i++) {
        if (board[gridY][i] == board[gridY][gridX]) {
            count++;
        } else {
            break;
        }
    }

    return count;
}

斜め方向のチェック

斜め方向のチェックでは、XとY座標の両方を同時に変化させます。

public int checkDiagonal() {
    int count = 0;

    // 左上方向を確認
    for (int i = gridY, j = gridX; i >= 0 && j >= 0; i--, j--) {
        if (board[i][j] == board[gridY][gridX]) {
            count++;
        } else {
            break;
        }
    }

    // 右下方向を確認
    for (int i = gridY + 1, j = gridX + 1; i < board.length && j < board.length; i++, j++) {
        if (board[i][j] == board[gridY][gridX]) {
            count++;
        } else {
            break;
        }
    }

    return count;
}

タグ: Java 二次元配列 五目並べ ゲーム開発 配列操作

9月10日 07:18 投稿