我想使用Java语言中的minimax算法将代码Tic Tac Toe (Caro) 3x3升级为5x5 Caro minimax 5x5,java netbeans,人类与计算机
package CaroMinimax;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//3x3 minimax
public class TicTacToeGUI implements ActionListener {
private static final int BOARD_SIZE = 3;
private static final char HUMAN_PLAYER = 'X';
private static final char COMPUTER_PLAYER = 'O';
private static final char EMPTY_SPACE = ' ';
private static final int WINNING_SCORE = 100;
private static final int LOSING_SCORE = -100;
private static final int DRAW_SCORE = 0;
private JButton[][] board;
private JFrame frame;
private boolean isHumanTurn;
private boolean isGameOver;
public TicTacToeGUI() {
// Create the game board
board = new JButton[BOARD_SIZE][BOARD_SIZE];
frame = new JFrame("Tic Tac Toe");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(BOARD_SIZE, BOARD_SIZE));
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
JButton button = new JButton("");
button.setFont(new Font("Arial", Font.PLAIN, 50));
button.addActionListener(this);
board[i][j] = button;
frame.add(button);
}
}
isHumanTurn = true;
isGameOver = false;
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (isGameOver) {
return;
}
JButton button = (JButton)e.getSource();
int row = -1;
int col = -1;
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == button) {
row = i;
col = j;
}
}
}
if (board[row][col].getText().equals("")) {
if (isHumanTurn) {
board[row][col].setText(Character.toString(HUMAN_PLAYER));
if (isWinner(HUMAN_PLAYER)) {
JOptionPane.showMessageDialog(frame, "You win!");
isGameOver = true;
} else if (isBoardFull()) {
JOptionPane.showMessageDialog(frame, "Draw!");
isGameOver = true;
} else {
isHumanTurn = false;
computerMove();
if (isWinner(COMPUTER_PLAYER)) {
JOptionPane.showMessageDialog(frame, "Computer wins!");
isGameOver = true;
} else if (isBoardFull()) {
JOptionPane.showMessageDialog(frame, "Draw!");
isGameOver = true;
} else {
isHumanTurn = true;
}
}
}
}
}
private boolean isWinner(char player) {
// Check rows
for (int i = 0; i < BOARD_SIZE; i++) {
int count = 0;
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j].getText().equals(Character.toString(player))) {
count++;
}
}
if (count == BOARD_SIZE) {
return true;
}
}
// Check columns
for (int j = 0; j < BOARD_SIZE; j++) {
int count = 0;
for (int i = 0; i < BOARD_SIZE; i++) {
if (board[i][j].getText().equals(Character.toString(player))) {
count++;
}
}
if (count == BOARD_SIZE) {
return true;
}
}
// Check diagonals
int count = 0;
for (int i = 0, j = 0; i < BOARD_SIZE && j < BOARD_SIZE; i++, j++) {
if (board[i][j].getText().equals(Character.toString(player))) {
count++;
}
}
if (count == BOARD_SIZE) {
return true;
}
count = 0;
for (int i = 0, j = BOARD_SIZE - 1; i < BOARD_SIZE && j >= 0; i++, j--) {
if (board[i][j].getText().equals(Character.toString(player))) {
count++;
}
}
if (count == BOARD_SIZE) {
return true;
}
return false;
}
private boolean isBoardFull() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j].getText().equals("")) {
return false;
}
}
}
return true;
}
private void computerMove() {
int bestScore = Integer.MIN_VALUE;
int bestRow = -1;
int bestCol = -1;
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j].getText().equals("")) {
board[i][j].setText(Character.toString(COMPUTER_PLAYER));
int score = minimax(false);
board[i][j].setText("");
if (score > bestScore) {
bestScore = score;
bestRow = i;
bestCol = j;
}
}
}
}
board[bestRow][bestCol].setText(Character.toString(COMPUTER_PLAYER));
}
private int minimax(boolean isMaximizing) {
if (isWinner(HUMAN_PLAYER)) {
return LOSING_SCORE;
} else if (isWinner(COMPUTER_PLAYER)) {
return WINNING_SCORE;
} else if (isBoardFull()) {
return DRAW_SCORE;
}
if (isMaximizing) {
int bestScore = Integer.MIN_VALUE;
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j].getText().equals("")) {
board[i][j].setText(Character.toString(COMPUTER_PLAYER));
int score = minimax(false);
board[i][j].setText("");
bestScore = Math.max(bestScore, score);
}
}
}
return bestScore;
} else {
int bestScore = Integer.MAX_VALUE;
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j].getText().equals("")) {
board[i][j].setText(Character.toString(HUMAN_PLAYER));
int score = minimax(true);
board[i][j].setText("");
bestScore = Math.min(bestScore, score);
}
}
}
return bestScore;
}
}
public static void main(String[] args) {
TicTacToeGUI game = new TicTacToeGUI();
}
}
我已尽一切努力将我的游戏从 3x3 升级到 5x5,但我遇到错误任何人都可以帮助我,谢谢 我已尽一切努力将我的游戏从 3x3 升级到 5x5,但我遇到错误任何人都可以帮助我,谢谢 我已尽一切努力将我的游戏从 3x3 升级到 5x5,但我遇到错误任何人都可以帮助我,谢谢