0

我是编程新手,我创建了一个简单的井字游戏。它输入了二维数组的行和列。但是,我想让它更简单,并使用一个值1-9来表示板上的每个方块。

我在这方面的做法似乎相当漫长而复杂。很抱歉格式错误,因为我想节省空间。

if (pos >= 0 && pos <= 9) { //checks if number is a valid position on the board
    if (pos == 1 && board[0][0] == ' ') { board[0][0] = xo; return true; }
    if (pos == 2 && board[0][1] == ' ') { board[0][1] = xo; return true; }
    if (pos == 3 && board[0][2] == ' ') { board[0][2] = xo; return true; }
    if (pos == 4 && board[1][0] == ' ') { board[1][0] = xo; return true; }
    if (pos == 5 && board[1][1] == ' ') { board[1][1] = xo; return true; }
    if (pos == 6 && board[1][2] == ' ') { board[1][2] = xo; return true; }
    if (pos == 7 && board[2][0] == ' ') { board[2][0] = xo; return true; }
    if (pos == 8 && board[2][1] == ' ') { board[2][1] = xo; return true; }
    if (pos == 9 && board[2][2] == ' ') { board[2][2] = xo; return true; }
}
return false;

内部 if 语句检查索引是否为空,然后根据输入的数字分配xor o。如果有人知道任何“更清洁”和更简单的方法,将不胜感激。

4

3 回答 3

1

赋值、算术和一元运算符

  • /- 部门运营商
  • %- 余数运算符

您可以在完全没有循环的情况下获取单元格的坐标,只使用从to范围内的[i][j]一个变量:pos19

public static boolean isValid(int pos, char xo) {
    int i = (pos - 1) / 3; // row
    int j = (pos - 1) % 3; // column
    if (board[i][j] == ' ') {
        board[i][j] = xo;
        return true;
    }
    return false;
}
于 2021-03-27T22:39:11.690 回答
0

将数组用于此类事情要方便得多。我会做这样的事情:

int p = 1;
for (int i = 0; i < 3; i++) {
    for (int j = 0; i < 3; i++) {
        if (p == pos && board[i][j] == ' ') {
            board[i][j] = xo;
            return true;
            p += 1;
        }
    }
}
return false;
于 2021-03-20T01:03:05.707 回答
0
int count = 1; //value of pos
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        char ch = board[i][j]; //setting that board value to ch
        if (pos == count && ch == ' ') {
            board[i][j] = xo; //that board value becomes xo
            return true; //returns true
        }
        count++;
    }
}
return false;
于 2021-03-20T01:28:36.757 回答