写一个五子棋c语言代码
时间: 2023-11-03 18:05:53 浏览: 34
以下是一个简单的五子棋 C 语言代码,供参考:
```c
#include<stdio.h>
#include<stdlib.h>
#define ROW 15 // 定义棋盘行数
#define COL 15 // 定义棋盘列数
#define BLACK 'X' // 定义黑棋标记
#define WHITE 'O' // 定义白棋标记
char board[ROW][COL] = {0}; // 定义棋盘
// 初始化棋盘
void InitBoard()
{
int i = 0;
int j = 0;
for(i=0; i<ROW; i++)
{
for(j=0; j<COL; j++)
{
board[i][j] = ' ';
}
}
}
// 绘制棋盘
void DrawBoard()
{
int i = 0;
int j = 0;
printf("\n");
for(i=0; i<ROW; i++)
{
printf(" %2d", i+1); // 打印行号
for(j=0; j<COL; j++)
{
printf(" %c", board[i][j]);
}
printf("\n");
}
printf(" ");
for(i=0; i<COL; i++)
{
printf("%2d ", i+1); // 打印列号
}
printf("\n\n");
}
// 判断输赢
char Judge()
{
int i = 0;
int j = 0;
char color = ' ';
// 横向
for(i=0; i<ROW; i++)
{
for(j=0; j<COL-4; j++)
{
color = board[i][j];
if(color!=' ' && color==board[i][j+1] && color==board[i][j+2] && color==board[i][j+3] && color==board[i][j+4])
{
return color;
}
}
}
// 纵向
for(i=0; i<ROW-4; i++)
{
for(j=0; j<COL; j++)
{
color = board[i][j];
if(color!=' ' && color==board[i+1][j] && color==board[i+2][j] && color==board[i+3][j] && color==board[i+4][j])
{
return color;
}
}
}
// 斜向
for(i=0; i<ROW-4; i++)
{
for(j=0; j<COL-4; j++)
{
color = board[i][j];
if(color!=' ' && color==board[i+1][j+1] && color==board[i+2][j+2] && color==board[i+3][j+3] && color==board[i+4][j+4])
{
return color;
}
}
}
for(i=4; i<ROW; i++)
{
for(j=0; j<COL-4; j++)
{
color = board[i][j];
if(color!=' ' && color==board[i-1][j+1] && color==board[i-2][j+2] && color==board[i-3][j+3] && color==board[i-4][j+4])
{
return color;
}
}
}
return ' '; // 没有获胜者
}
// 判断是否下子成功
int Place(int x, int y, char color)
{
if(x<0 || x>=ROW || y<0 || y>=COL || board[x][y]!=' ')
{
return 0; // 下子失败
}
board[x][y] = color;
return 1; // 下子成功
}
// 人下棋
void Human()
{
int x = 0;
int y = 0;
printf("请输入您要下的坐标(x,y):");
scanf("%d,%d", &x, &y);
while(1)
{
if(Place(x-1, y-1, BLACK))
{
break;
}
printf("您输入的位置不合法,请重新输入(x,y):");
scanf("%d,%d", &x, &y);
}
}
// AI下棋
void AI()
{
int x = 0;
int y = 0;
printf("AI正在思考...\n");
while(1)
{
x = rand()%ROW;
y = rand()%COL;
if(Place(x, y, WHITE))
{
break;
}
}
printf("AI在(%d,%d)处下了一颗棋子\n", x+1, y+1);
}
int main()
{
char result = ' ';
int turn = 0;
InitBoard();
DrawBoard();
while(1)
{
if(turn%2 == 0) // 人下棋
{
Human();
}
else // AI下棋
{
AI();
}
turn++;
DrawBoard();
result = Judge();
if(result!= ' ')
{
if(result == BLACK)
{
printf("你赢了!\n");
}
else
{
printf("AI赢了!\n");
}
break;
}
}
return 0;
}
```
注意事项:
1. 代码中使用了 `rand()` 函数来实现 AI 下棋时的随机性。
2. 下棋时,输入的坐标是从 1 开始的,但是在代码中需要将其转换为从 0 开始的数组下标。
3. 如果需要增加难度,可以在 AI 下棋时增加一些算法,例如博弈树搜索等。