【问题标题】:Java ArrayList for Tic Tac Toe game用于井字游戏的 Java ArrayList
【发布时间】:2018-10-14 21:03:48
【问题描述】:

您好,我刚开始使用 Java,需要一些帮助。我目前正在从事井字游戏项目,但我被卡住了。在游戏开始时,我希望棋盘上的所有 9 个位置都有一个“”,以便棋盘显示为空,但是当玩家选择下一步时,我希望他们使用以下格式:A1、A2、A3, B1 等。如何将我的 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();
}

【问题讨论】:

    标签: java tic-tac-toe


    【解决方案1】:

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

    您知道网格是一个3x3 矩阵(3 行乘 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';
    

    将返回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
    

    【讨论】:

      【解决方案2】:

      试试这个。

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

      【讨论】:

        猜你喜欢
        • 2015-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多