五子棋人机对战c++代码
时间: 2023-08-24 13:09:55 浏览: 159
这里是一个简单的五子棋人机对战的 C 代码,可以供您参考。
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 15
#define COL 15
char board[ROW][COL]; // 棋盘
// 初始化棋盘
void InitBoard()
{
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
board[i][j] = ' ';
}
}
}
// 打印棋盘
void PrintBoard()
{
int i, j;
printf(" ");
for (i = 0; i < ROW; i++) {
printf("%d ", i);
}
printf("\n");
for (i = 0; i < ROW; i++) {
printf("%d ", i);
for (j = 0; j < COL; j++) {
printf("%c|", board[i][j]);
}
printf("\n");
}
}
// 判断胜负
int IsWin(char c)
{
int i, j, k;
// 横向判断
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL - 4; j++) {
for (k = 0; k < 5; k++) {
if (board[i][j+k] != c) {
break;
}
}
if (k == 5) {
return 1;
}
}
}
// 纵向判断
for (i = 0; i < ROW - 4; i++) {
for (j = 0; j < COL; j++) {
for (k = 0; k < 5; k++) {
if (board[i+k][j] != c) {
break;
}
}
if (k == 5) {
return 1;
}
}
}
// 斜向判断
for (i = 0; i < ROW - 4; i++) {
for (j = 0; j < COL - 4; j++) {
for (k = 0; k < 5; k++) {
if (board[i+k][j+k] != c) {
break;
}
}
if (k == 5) {
return 1;
}
}
}
// 反斜向判断
for (i = 4; i < ROW; i++) {
for (j = 0; j < COL - 4; j++) {
for (k = 0; k < 5; k++) {
if (board[i-k][j+k] != c) {
break;
}
}
if (k == 5) {
return 1;
}
}
}
return 0;
}
// 人下棋
void PlayerMove()
{
int x, y;
while (1) {
printf("请输入坐标(x y):");
scanf("%d %d", &x, &y);
if (x < 0 || x >= ROW || y < 0 || y >= COL || board[x][y] != ' ') {
printf("坐标输入有误,请重新输入!\n");
} else {
board[x][y] = '*';
break;
}
}
}
// 电脑下棋
void ComputerMove()
{
int x, y;
srand((unsigned int)time(NULL));
while (1) {
x = rand() % ROW;
y = rand() % COL;
if (board[x][y] == ' ') {
board[x][y] = '#';
break;
}
}
}
// 主函数
int main()
{
InitBoard();
PrintBoard();
while (1) {
PlayerMove();
PrintBoard();
if (IsWin('*')) {
printf("恭喜你,你赢了!\n");
break;
}
ComputerMove();
PrintBoard();
if (IsWin('#')) {
printf("很遗憾,你输了!\n");
break;
}
}
return 0;
}
```
这个代码实现了一个简单的五子棋人机对战,人执黑子,电脑执白子。电脑下棋使用了随机策略,没有使用更加智能的算法。如果您想要提高电脑的水平,可以尝试使用更加高级的算法,比如 Alpha-Beta 剪枝、蒙特卡罗树搜索等。
阅读全文