これが私のコードです:
public boolean isGameOver() {
if (getWinner() == null)
return false;
for (int i=0; i<BOARD_WIDTH; i++){
if (board[0][i]!=null){
return true;
}
}
return true;
}
public Player getWinner() {
Player winner = getToMove();
if (checkRows() || checkCols() || checkLowDiag() || checkHighDiag() ){
return winner;
}
return null;
}
public boolean checkRows(){
for (int i=0;i<BOARD_HEIGHT; i++){
for (int j = 0; j<BOARD_WIDTH; j++){
if (getSquare(i, j) != null && getSquare(i, j) == getToMove()){
if (getSquare(i, j) == getSquare(i, j+1) && getSquare(i, j+1) != null &&
getSquare(i, j) == getSquare(i, j+2) && getSquare(i, j+2) != null &&
getSquare(i, j) == getSquare(i, j+3) && getSquare(i, j+3) != null)
return true;
}
}
}
return false;
}
public boolean checkCols(){
for (int i=0;i<BOARD_HEIGHT; i++){
for (int j = 0; j<BOARD_WIDTH; j++){
if (getSquare(i, j) != null && getSquare(i, j) == getToMove()){
if (getSquare(i, j) == getSquare(i+1, j) && getSquare(i+1, j) != null &&
getSquare(i, j) == getSquare(i+2, j) && getSquare(i+2, j) != null &&
getSquare(i, j) == getSquare(i+3, j) && getSquare(i+3, j) != null)
return true;
}
}
}
return false;
}
public boolean checkLowDiag(){
for (int i=0; i<BOARD_HEIGHT; i++){
for (int j=0; j<BOARD_WIDTH; j++){
if (getSquare(i, j) != null && getSquare(i, j) == getToMove()){
if (getSquare(i, j) == getSquare(i+1, j+1) && getSquare(i+1, j+1) != null &&
getSquare(i, j) == getSquare(i+2, j+2) && getSquare(i+2, j+2) != null &&
getSquare(i, j) == getSquare(i+3, j+3) && getSquare(i+3, j+3) != null)
return true;
}
}
}
return false;
}
public boolean checkHighDiag(){
for (int i=0; i<BOARD_HEIGHT; i++){
for (int j=0; j<BOARD_WIDTH; j++){
if (getSquare(i, j) != null && getSquare(i, j) == getToMove()){
if (getSquare(i, j) == getSquare(i-1, j+1) && getSquare(i-1, j+1) != null &&
getSquare(i, j) == getSquare(i-2, j+2) && getSquare(i-2, j+2) != null &&
getSquare(i, j) == getSquare(i-3, j+3) && getSquare(i-3, j+3) != null)
return true;
}
}
}
return false;
}
何らかの理由で、ゲーム オーバー機能が正しく動作しません。理由はわかりません。ゲームが進行中の間は true を返し、ゲームが終了すると false を返します。ちなみに、これはコネクトフォーゲーム用です。前もって感謝します!
編集: getToMove は、移動しようとしているプレーヤーを提供します。変数 Player toMove を指定するだけで、toMove は最初に 'x' として決定されます。makeMove 関数では、次のプレーヤーに移動するように変更します。関連するメソッドを次に示します。
public boolean makeMove(int col) {
if (board[0][col] != null){
return false;
}
else {
for (int i=BOARD_HEIGHT-1; i>=0; i--){
if (board[i][col] == null){
board[i][col] = getToMove();
saveRow.add(i);
saveCol.add(col);
if (getToMove() == x)
toMove = o;
else if (getToMove() == o)
toMove = x;
return true;
}
}
}
return false;
}
public Player getSquare(int row, int col) {
if (row > BOARD_HEIGHT-1 || row < 0 || col > BOARD_WIDTH-1 || col < 0)
return null;
else return board[row][col];
}
public Player getToMove() {
return toMove;
}