这是我的代码:
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;
}