用C++写个五子棋游戏,要求人机对决
时间: 2024-03-25 10:37:34 浏览: 72
好的,我可以给您提供一个简单的五子棋游戏的代码。代码中包含了一个简单的人机对战的算法,您可以根据自己的需要对其进行修改和优化。以下是代码:
```c++
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<cstring>
using namespace std;
const int ROWS = 15;
const int COLS = 15;
const int WINCNT = 5;
char Chessboard[ROWS][COLS]; // 定义棋盘数组
// 绘制棋盘
void DrawChessboard()
{
cout << " ";
for (int i = 0; i < COLS; i++)
{
cout << i << " ";
}
cout << endl;
for (int i = 0; i < ROWS; i++)
{
cout << i << " ";
for (int j = 0; j < COLS; j++)
{
cout << Chessboard[i][j] << " ";
}
cout << endl;
}
}
// 初始化棋盘
void InitChessboard()
{
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
Chessboard[i][j] = '+';
}
}
}
// 判断落子是否合法
bool IsValid(int row, int col)
{
if (row < 0 || row >= ROWS || col < 0 || col >= COLS)
{
return false;
}
if (Chessboard[row][col] != '+')
{
return false;
}
return true;
}
// 判断是否有一方获胜
bool IsWin(char c)
{
// 水平方向
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS - WINCNT + 1; j++)
{
bool flag = true;
for (int k = 0; k < WINCNT; k++)
{
if (Chessboard[i][j+k] != c)
{
flag = false;
break;
}
}
if (flag)
{
return true;
}
}
}
// 垂直方向
for (int i = 0; i < ROWS - WINCNT + 1; i++)
{
for (int j = 0; j < COLS; j++)
{
bool flag = true;
for (int k = 0; k < WINCNT; k++)
{
if (Chessboard[i+k][j] != c)
{
flag = false;
break;
}
}
if (flag)
{
return true;
}
}
}
// 主对角线方向
for (int i = 0; i < ROWS - WINCNT + 1; i++)
{
for (int j = 0; j < COLS - WINCNT + 1; j++)
{
bool flag = true;
for (int k = 0; k < WINCNT; k++)
{
if (Chessboard[i+k][j+k] != c)
{
flag = false;
break;
}
}
if (flag)
{
return true;
}
}
}
// 副对角线方向
for (int i = WINCNT - 1; i < ROWS; i++)
{
for (int j = 0; j < COLS - WINCNT + 1; j++)
{
bool flag = true;
for (int k = 0; k < WINCNT; k++)
{
if (Chessboard[i-k][j+k] != c)
{
flag = false;
break;
}
}
if (flag)
{
return true;
}
}
}
return false;
}
// 人类玩家落子
void HumanPlayer(int& row, int& col)
{
cout << "请输入落子位置:";
cin >> row >> col;
while (!IsValid(row, col))
{
cout << "输入错误,请重新输入落子位置:";
cin >> row >> col;
}
Chessboard[row][col] = 'O';
}
// AI玩家落子
void AIPlayer(int& row, int& col)
{
srand((unsigned)time(NULL));
while (true)
{
row = rand() % ROWS;
col = rand() % COLS;
if (IsValid(row, col))
{
Chessboard[row][col] = 'X';
break;
}
}
}
int main()
{
InitChessboard(); // 初始化棋盘
DrawChessboard(); // 绘制棋盘
while (true)
{
int row, col;
HumanPlayer(row, col); // 人类玩家落子
DrawChessboard(); // 绘制棋盘
if (IsWin('O')) // 判断人类玩家是否获胜
{
cout << "恭喜你获胜了!" << endl;
break;
}
AIPlayer(row, col); // AI玩家落子
DrawChessboard(); // 绘制棋盘
if (IsWin('X')) // 判断AI玩家是否获胜
{
cout << "很遗憾,你输了!" << endl;
break;
}
}
return 0;
}
```
以上代码中,我们通过 `InitChessboard()` 函数初始化棋盘,通过 `DrawChessboard()` 函数绘制棋盘,通过 `IsValid()` 函数判断落子是否合法,通过 `IsWin()` 函数判断是否有一方获胜,通过 `HumanPlayer()` 函数让人类玩家落子,通过 `AIPlayer()` 函数让AI玩家落子。在主函数中,我们通过一个 while 循环,实现了人机对战的过程。
阅读全文