[Java] 井字遊戲,TicTacToe

package Practice_Ch9;

import java.util.Scanner;

public class Practice_Ch9_3 {

protected static char[][] board;
private char player;

public Practice_Ch9_3() {
board = new char[3][3]; // 3x3井字
player = 'O'; // 初始玩家設為O
cleanBoard();
}

protected void printBoard() {
System.out.println("----------");
for (int i = 0; i < 3; i++) {
System.out.print("|");
for (int j = 0; j < 3; j++) {
System.out.print(board[i][j] + " |");
}
System.out.println();
System.out.println("----------");
}
System.out.println();
}

protected void cleanBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}

protected boolean chkBoardFull() {
boolean isFull = true;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == ' ') {
isFull = false;
} else {
isFull = true;
}
}
}
return isFull;
}
// [0][0] [0][1] [0][2]
// [1][0] [1][1] [1][2]
// [2][0] [2][1] [2][2]

protected int ChkWin() {
int result;
if (board[0][0] == board[0][1] && board[0][1] == board[0][2] && board[0][1] == 'O'
|| board[1][0] == board[1][1] && board[1][1] == board[1][2] && board[1][1] == 'O'
|| board[2][0] == board[2][1] && board[2][1] == board[2][2] && board[2][1] == 'O'
|| board[0][0] == board[1][0] && board[1][0] == board[2][0] && board[1][0] == 'O'
|| board[0][1] == board[1][1] && board[1][1] == board[2][1] && board[1][1] == 'O'
|| board[0][2] == board[1][2] && board[1][2] == board[2][2] && board[1][2] == 'O'
|| board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] == 'O'
|| board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] == 'O'
                  {
result = 1;
  } else if (
                              board[0][0] == board[0][1] && board[0][1] == board[0][2] && board[0][1] == 'X'
|| board[1][0] == board[1][1] && board[1][1] == board[1][2] && board[1][1] == 'X'
|| board[2][0] == board[2][1] && board[2][1] == board[2][2] && board[2][1] == 'X'
|| board[0][0] == board[1][0] && board[1][0] == board[2][0] && board[1][0] == 'X'
|| board[0][1] == board[1][1] && board[1][1] == board[2][1] && board[1][1] == 'X'
|| board[0][2] == board[1][2] && board[1][2] == board[2][2] && board[1][2] == 'X'
|| board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] == 'X'
|| board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] == 'X')                 {
result = 2;
} else {
result = 3;
}
return result;
        }

public static void main(String[] args) {
// TODO Auto-generated method stub
Practice_Ch9_3 p = new Practice_Ch9_3();
Scanner sc = new Scanner(System.in);
p.printBoard();
System.out.println();
while (p.chkBoardFull() == false) {
System.out.println("輪到 " + p.player + " 的回合");
System.out.println("輸入要填入第幾行(row)(1~3)");
int i = sc.nextInt() - 1;
System.out.println("輸入要填入第幾列(column)(1~3)");
int j = sc.nextInt() - 1;
System.out.println(p.player + "在" + "[" + (i + 1) + "]" + "[" + (j + 1) + "]");
if (p.player == 'O' && board[i][j] == ' ') {
board[i][j] = 'O';
p.player = 'X';
} else if (p.player == 'X' && board[i][j] == ' ') {
board[i][j] = 'X';
p.player = 'O';
} else {
System.out.println("此格已有填入,請重新選取");
continue;
}
p.printBoard();
if (p.ChkWin() == 1) {
System.out.println("O 獲勝");
break;
} else if (p.ChkWin() == 2) {
System.out.println("X 獲勝");
break;
} else if (p.ChkWin() == 3) {
continue;
}
}
if (p.chkBoardFull()) {
System.out.println("平手");
}
}
}

留言

熱門文章