當遊戲執行時,玩家可以進入一個移動,但然後它卡在一個循環中,邏輯錯誤是在isWinner方法,但我不知道該怎麼做沒有使用一堆長長的if語句?請幫助我不能發現我的邏輯錯誤
public class TicTacToe {
public static char board[] = new char[10];
public static void resetgame(){
for (int x = 0; x < board.length; x++)
board[x] = '-'; // resets board to all -
}
public static void displayBoard(){
for (int x = 1; x < board.length; x++){
if (board[x] == '-')
System.out.print(x + " ");
else
System.out.print(board[x] + " ");
if (x % 3 == 0)
System.out.println();
}
}
public static boolean isSpotEmpty(int m){
return (board[m] == '-');
}
public static void getPlayerMove(){
Scanner input = new Scanner(System.in);
System.out.print("Enter your move (1-9): ");
int move = input.nextInt();
while (move < 1 || move > 9 || !isSpotEmpty(move)){ //validate move
System.out.print("Move is not valid. Reenter move (1-9): ");
move = input.nextInt();
}
board[move] = 'X';
}
public static void computerMove(){
int move = ((int)(Math.random() * 9)+1);
while (isSpotEmpty(move)==false)
move = ((int)(Math.random() * 9)+1);
board[move] = 'O';
}
public static boolean isWinner(char ch){
for(int x = 1; x < 4; x++){
while (board[x] != ch)
return false;}
for(int x = 4; x < 7; x++){
while (board[x] != ch)
return false;}
for (int x = 7; x < board.length; x++){
while (board[x] != ch)
return false;}
for (int x = 1; x < 8; x += 3){
while (board[x] != ch)
return false;}
for (int x = 2; x < 9; x += 3){
while (board[x] != ch)
return false;}
for (int x = 3; x < board.length; x += 3){
while (board[x] != ch)
return false;}
for (int x = 1; x < board.length; x += 4){
while (board[x] != ch)
return false;}
for (int x = 3; x < 8; x += 2){
while (board[x] != ch)
return false;}
return true;
}
public static boolean isFull(){
boolean draw = false;
for (int x = 0; x < board.length; x++){
while (board[x] != '-')
draw = true;
}
return draw;
}
public static boolean isGameDone(){
if (isWinner('X')){
System.out.println("Player wins!");
return true;
}
if (isWinner('O')){
System.out.println("You suck! Computer wins!");
return true;
}
if (isFull()){
System.out.println("Draw!");
return true;
}
return false;
}
public static void tictactoe(){
resetgame();
displayBoard();
while (true){
getPlayerMove();
displayBoard();
if (isGameDone()==true) return;
System.out.println("Computer's move!");
computerMove();
displayBoard();
if (isGameDone()==true) return;
System.out.println("Your move!");
}
}
public static void main(String[] args) {
tictactoe();
}
}
您可以使用'switch'語句。 – 2014-11-21 05:19:26
用'if'替換所有'while',看看它是否解決了這個問題。 – 2014-11-21 05:21:21
嘗試過......沒有骰子 – Luke 2014-11-21 05:22:36