井字棋java代码_JAVA 井字棋
时间: 2023-07-09 19:33:29 浏览: 48
好的,以下是一个简单的井字棋 Java 代码示例:
```java
import java.util.Scanner;
public class TicTacToe {
private char[][] board; // 棋盘
private char currentPlayer; // 当前玩家
public TicTacToe() {
board = new char[3][3];
currentPlayer = 'X';
initializeBoard();
}
// 初始化棋盘
public void initializeBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = '-';
}
}
}
// 打印棋盘
public 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("-------------");
}
}
// 切换玩家
public void changePlayer() {
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
}
// 检查是否已经有人胜利
public boolean checkForWin() {
return (checkRowsForWin() || checkColumnsForWin() || checkDiagonalsForWin());
}
// 检查行是否有胜利者
public boolean checkRowsForWin() {
for (int i = 0; i < 3; i++) {
if (checkRowCol(board[i][0], board[i][1], board[i][2])) {
return true;
}
}
return false;
}
// 检查列是否有胜利者
public boolean checkColumnsForWin() {
for (int i = 0; i < 3; i++) {
if (checkRowCol(board[0][i], board[1][i], board[2][i])) {
return true;
}
}
return false;
}
// 检查对角线是否有胜利者
public boolean checkDiagonalsForWin() {
return (checkRowCol(board[0][0], board[1][1], board[2][2]) || checkRowCol(board[0][2], board[1][1], board[2][0]));
}
// 检查行或列是否有连续三个相同的字符
public boolean checkRowCol(char c1, char c2, char c3) {
return ((c1 != '-') && (c1 == c2) && (c2 == c3));
}
// 下棋
public void placeMark(int row, int col) {
if ((row >= 0) && (row < 3) && (col >= 0) && (col < 3)) {
if (board[row][col] == '-') {
board[row][col] = currentPlayer;
}
}
}
// 运行游戏
public void play() {
Scanner scanner = new Scanner(System.in);
boolean gameOver = false;
System.out.println("Let's play Tic Tac Toe!");
while (!gameOver) {
System.out.println("Player " + currentPlayer + ", enter a row (0, 1, or 2): ");
int row = scanner.nextInt();
System.out.println("Player " + currentPlayer + ", enter a column (0, 1, or 2): ");
int col = scanner.nextInt();
placeMark(row, col);
printBoard();
if (checkForWin()) {
System.out.println("Congratulations! Player " + currentPlayer + " wins!");
gameOver = true;
} else if (boardFull()) {
System.out.println("Game over! It's a tie!");
gameOver = true;
} else {
changePlayer();
}
}
}
// 检查棋盘是否已满
public boolean boardFull() {
boolean full = true;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == '-') {
full = false;
}
}
}
return full;
}
public static void main(String[] args) {
TicTacToe game = new TicTacToe();
game.play();
}
}
```
这个示例中,我们创建了一个 `TicTacToe` 类,表示一个井字棋游戏。在 `TicTacToe` 类中,我们定义了一些方法,如 `initializeBoard` 方法用于初始化棋盘,`printBoard` 方法用于打印棋盘,`changePlayer` 方法用于切换玩家,`checkForWin` 方法用于检查是否已经有人胜利等等。我们还在 `main` 方法中创建了一个 `TicTacToe` 对象并调用了 `play` 方法来运行游戏。
在游戏运行过程中,我们使用 `Scanner` 类来读取玩家的输入。玩家在每轮中输入一个行号和列号,程序会根据这个输入来下棋。程序会在每轮结束时检查是否有人胜利或棋盘已满,如果有人胜利或棋盘已满,游戏结束。如果没有人胜利或棋盘未满,程序会切换到下一个玩家并进行下一轮游戏。