Java 井字游戏的 ArrayList

Java ArrayList for Tic Tac Toe game

您好,我刚开始使用 Java,我需要一些帮助。我目前正在做一个井字游戏项目,但遇到了困难。在游戏开始时,我希望游戏板上的所有 9 个位置都有一个 ' ',以便棋盘显示为空,但是当玩家 select 他们的下一步行动时,我希望他们使用以下格式:A1, A2、A3、B1 等。如何使用这些字符串 link 我的 arrayList?

示例 A1 = 0,A2 = 1.... C3=8

    public static void printGameBoard() {
    System.out.println("    A    B    C");
    System.out.println("   ______________");
    System.out.println("  |    |    |    |");
    System.out.println("1 |" + board.get(0) + " | " + board.get(1) + " | " + board.get(2) + " | ");
    System.out.println("  |----|----|----|");
    System.out.println("2 |" + board.get(3) + " | " + board.get(4) + " | " + board.get(5) + " | ");
    System.out.println("  |----|----|----|");
    System.out.println("3 |" + board.get(6) + " | " + board.get(7) + " | " + board.get(8) + " | ");
    System.out.println("  |____|____|____|\n");

public static int gameplay() {
    boardSize = 9;
    board = new ArrayList();

    for(int i = 0; i < boardSize; i++) {
        board.add(Character.valueOf(' '));
    }       

    return playerTurn();
}

试试这个。

 for(int i = 0; i < boardSize; i++) {
   board.add(Character.valueOf(i+1));
}

所以,你ArrayList是一个线性容器,包含0-n个元素。您的网格是一个二维容器,允许通过 yxx 引用来引用元素。您需要一种能够在它们之间进行转换的方法。

您知道网格是一个 3x3 矩阵(3 行 x 3 列),所以一点点简单的数学运算会派上用场。

A 引用第一个列,因此您的索引将是 (y - 1) + (0 * 3)(请记住,Java 是 0 索引) B 引用第二列,因此您的索引将是 (y - 1) + (1 * 3) C 引用第三列,因此您的索引将是 (y - 1) + (2 * 3)

现在,你需要的只是将字母转换成数字,惊人的是,这其实非常简单...

String cell = "A1";
int col = cell.charAt(0) - 'A';

将 return 0.

稍微安全一点的解决方案是从您的操作中完全移除外壳,例如...

int col = cell.toLowerCase().charAt(0) - 'a';

现在,您需要对输入进行一些验证以确保值在范围内。

但是那一行呢??

String cell = "A1";
int col = cell.toLowerCase().charAt(0) - 'a';
int row = Integer.parseInt(cell.substring(1)) - 1;

System.out.println(row + "x" + col);

简单:)

因此,您可以将其组合在一起,例如...

if (row >= 0 && row < 3 && col >= 0 && col < 3) {
    int index = (row * 3) + col;
    board.set(index, "x");
}

或类似的东西

而且因为我的数学全部倒转了....

String[] cols = new String[]{"A", "B", "C"};
for (int rowIndex = 1; rowIndex < 4; rowIndex++) {
    for (String colValue : cols) {
        String cell = colValue + rowIndex;
        int col = cell.toLowerCase().charAt(0) - 'a';
        int row = Integer.parseInt(cell.substring(1)) - 1;
        int index = (row * 3) + col;
        System.out.println("Cell = " + cell + "; index = " + index);
    }
}

产出

Cell = A1; index = 0
Cell = B1; index = 1
Cell = C1; index = 2
Cell = A2; index = 3
Cell = B2; index = 4
Cell = C2; index = 5
Cell = A3; index = 6
Cell = B3; index = 7
Cell = C3; index = 8