1

我正在创建一个简单的井字游戏。我使用单个空格字符初始化了我的 3x3 板。

private char[][] board;
private char player; // 'X' or 'O'

public TicTacToe() {
 for(int i = 0; i < 3; i++)
   {
     for(int j = 0; j <3; j++)
     {
       board[i][j] = ' ';
     }
   }
 player = 'X';
 }

我要求用户输入坐标,如下所示:

   1  2  3
A |  |  |  |
B |  |  |  |
C |  |  |  |

因此,如果 X 进入 B2,O 进入 A3,则棋盘将如下所示:

   1  2  3
A |  |  |O |
B |  | X|  |
C |  |  |  |

现在,我正在尝试编写一个方法来检查当前玩家的移动是否有效。

问题: 如何转换用户字符串输入 (A=1,B=2,C=3) 以便查看 board[x][y] 是否包含 ' ' 字符?

4

3 回答 3

2

您可以使用String.charAt(int)从字符串中的任何点获取字符。请注意,与数组一样,字符串中的第一个字符是索引 0,而不是 1。

然后,您可以将它们转换为索引,如下所示:

input = input.toUpperCase(); // Makes code work for all cases
int x = input.charAt(0) - 'A';
int y = input.charAt(1) - '1';
char currentValue = board[x][y];

之后,currentValue将包含当前在该位置的游戏板上的值。

于 2012-05-09T01:52:44.043 回答
0

你可以简单地检查一下。因为你只有 3 个选项,你可以做这样的事情:

int row = input.charAt(0);
int col = input.charAt(1) - 1;

if(row == 'A')
    row = 0;
else if(row == 'B')
    row = 1;
else if(row == 'C')
    row = 2;

现在你可以得到协调

if(board[row][col]).equals("X") {
....
}
else if(board[row][col]).equals("O") {
...
}
else {
...
}
于 2012-05-09T01:59:24.310 回答
0

我喜欢 Jake King 的解决方案,它非常简短优雅,但在我的偏好中,它不是“通过查看可调试”

我会做这样的事情,在我个人看来,这更明确

    Map<Character, Integer> rowMap = new HashMap<Character, Integer>();
    rowMap.put('A', 0);
    rowMap.put('B', 1);
    rowMap.put('C', 3);

    // Validations of input come here first...

    int row = rowMap.get(input.charAt(0));
    int col = Character.getNumericValue(input.charAt(1))-1;

    char place = board[row][col]; 

    if(place!=' '){
        throw new RuntimeException("Place is not empty");
    }
于 2012-05-09T02:01:24.640 回答