用Java写完整的井字棋人机交互对战
时间: 2024-09-25 07:17:14 浏览: 20
编写一个完整的井字棋人机对战程序可以用Java语言,这里提供一个基础的控制台版游戏示例。首先,我们需要创建一个二维数组表示棋盘,然后实现用户输入、机器随机选择位置、检查胜负以及平局判断等功能。
```java
import java.util.Scanner;
import java.util.Random;
class TicTacToe {
private static final int BOARD_SIZE = 3;
private char[][] board = new char[BOARD_SIZE][BOARD_SIZE];
private char currentPlayer;
public TicTacToe() {
currentPlayer = 'X'; // 用户先手
}
public void makeMove(int row, int col) {
if (board[row][col] == '\0') {
board[row][col] = currentPlayer;
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
} else {
System.out.println("该位置已有人占用,请重新选择!");
}
}
public boolean checkWin() {
for (int i = 0; i < BOARD_SIZE; i++) {
if (checkRow(i) || checkCol(i) || checkDiagonal()) {
return true;
}
}
return false;
}
private boolean checkRow(int row) {
return board[row][0] != '\0' && board[row][0] == board[row][1] && board[row][1] == board[row][2];
}
private boolean checkCol(int col) {
return board[0][col] != '\0' && board[0][col] == board[1][col] && board[1][col] == board[2][col];
}
private boolean checkDiagonal() {
return board[0][0] != '\0' && board[0][0] == board[1][1] && board[1][1] == board[2][2]
|| board[0][2] != '\0' && board[0][2] == board[1][1] && board[1][1] == board[2][0];
}
public boolean isBoardFull() {
for (char[] row : board) {
for (char cell : row) {
if (cell == '\0') {
return false;
}
}
}
return true;
}
public void playGame(Scanner scanner) {
while (!isBoardFull() && !checkWin()) {
if (currentPlayer == 'X') {
System.out.print("请输入行和列(1-3),例如1 2:");
scanner.nextLine(); // consume newline
int row = scanner.nextInt() - 1;
int col = scanner.nextInt() - 1;
makeMove(row, col);
} else { // Computer's turn
Random rand = new Random();
int randomRow = rand.nextInt(BOARD_SIZE);
int randomCol = rand.nextInt(BOARD_SIZE);
makeMove(randomRow, randomCol);
}
}
printBoard();
decideWinner();
}
private void decideWinner() {
if (checkWin()) {
System.out.println(currentPlayer + "赢了!");
} else {
System.out.println("平局!");
}
}
private void printBoard() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
System.out.print(board[i][j] + " ");
}
System.out.println();
}
}
}
public class Main {
public static void main(String[] args) {
TicTacToe game = new TicTacToe();
Scanner input = new Scanner(System.in);
game.playGame(input);
}
}
```