五子棋人机对战有悔棋功能和棋盘的c++代码
时间: 2023-10-01 10:03:26 浏览: 46
以下是一个简单的五子棋人机对战的C++代码示例,包括悔棋功能和棋盘的实现:
```cpp
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
const int BOARD_SIZE = 15;
const char EMPTY = '-';
const char PLAYER = 'X';
const char AI = 'O';
struct Move {
int row, col;
};
class Game {
private:
char board[BOARD_SIZE][BOARD_SIZE];
stack<Move> moves;
public:
Game() {
for (int row = 0; row < BOARD_SIZE; ++row) {
for (int col = 0; col < BOARD_SIZE; ++col) {
board[row][col] = EMPTY;
}
}
}
void displayBoard() {
for (int row = 0; row < BOARD_SIZE; ++row) {
for (int col = 0; col < BOARD_SIZE; ++col) {
cout << board[row][col] << " ";
}
cout << endl;
}
cout << endl;
}
bool makeMove(int row, int col, char player) {
if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE || board[row][col] != EMPTY) {
return false;
}
board[row][col] = player;
Move move;
move.row = row;
move.col = col;
moves.push(move);
return true;
}
void undoMove() {
if (!moves.empty()) {
Move move = moves.top();
moves.pop();
board[move.row][move.col] = EMPTY;
}
}
bool isGameOver(char player) {
// 检查行
for (int row = 0; row < BOARD_SIZE; ++row) {
for (int col = 0; col < BOARD_SIZE - 4; ++col) {
bool win = true;
for (int i = 0; i < 5; ++i) {
if (board[row][col + i] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
}
// 检查列
for (int col = 0; col < BOARD_SIZE; ++col) {
for (int row = 0; row < BOARD_SIZE - 4; ++row) {
bool win = true;
for (int i = 0; i < 5; ++i) {
if (board[row + i][col] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
}
// 检查对角线
for (int row = 0; row < BOARD_SIZE - 4; ++row) {
for (int col = 0; col < BOARD_SIZE - 4; ++col) {
bool win = true;
for (int i = 0; i < 5; ++i) {
if (board[row + i][col + i] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
}
// 检查反对角线
for (int row = 4; row < BOARD_SIZE; ++row) {
for (int col = 0; col < BOARD_SIZE - 4; ++col) {
bool win = true;
for (int i = 0; i < 5; ++i) {
if (board[row - i][col + i] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
}
return false;
}
};
int main() {
Game game;
int row, col;
while (true) {
cout << "Player's turn (row col): ";
cin >> row >> col;
if (!game.makeMove(row, col, PLAYER)) {
cout << "Invalid move. Try again." << endl;
continue;
}
game.displayBoard();
if (game.isGameOver(PLAYER)) {
cout << "Player wins!" << endl;
break;
}
// AI's turn
// 这里需要实现AI的下棋策略
// ...
game.displayBoard();
if (game.isGameOver(AI)) {
cout << "AI wins!" << endl;
break;
}
}
return 0;
}
```
上述代码实现了一个简单的五子棋人机对战,并包含了悔棋功能。你可以在AI的回合中实现具体的下棋策略。请注意,这只是一个简单的示例,你可能需要根据你的需求进行相应的修改和优化。