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)して、文字列内の任意の位置から文字を取得できます。配列と同様に、文字列の最初の文字のインデックスは 1 ではなく 0 であることに注意してください。

次に、これらを次のようにインデックスに変換できます。

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

私はジェイクキングのソリューションが好きです、それは非常に短くてエレガントです、しかし私の好みでは、それは「見ることによってデバッグ可能」ではありません

私はこのようなことをしただろうが、私の個人的な意見ではもっと明白である

    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 に答える