500行左右的c语言五子棋代码
时间: 2023-08-12 17:24:27 浏览: 50
以下是一个大约500行的C语言五子棋代码示例,供您参考:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROW 15
#define COL 15
void init_board(char board[ROW][COL]); // 初始化棋盘
void display_board(char board[ROW][COL]); // 显示棋盘
void player_move(char board[ROW][COL]); // 玩家走棋
void computer_move(char board[ROW][COL]); // 计算机走棋
int judge(char board[ROW][COL], int x, int y, char c); // 判断胜负
int main()
{
char board[ROW][COL]; // 棋盘
int i, j, flag; // 循环计数器和标志位,flag=1表示玩家胜利,flag=2表示计算机胜利
char c; // 玩家选手执黑棋还是白棋
printf("欢迎来到五子棋游戏!\n");
printf("请选择您要执的棋子(B表示黑棋,W表示白棋):");
scanf("%c", &c);
getchar();
init_board(board); // 初始化棋盘
display_board(board); // 显示棋盘
for (i = 0; i < ROW * COL / 2; i++)
{
player_move(board); // 玩家走棋
display_board(board);
flag = judge(board, ROW - 1, COL - 1, c); // 判断胜负
if (flag == 1)
{
printf("恭喜您,你赢了!\n");
break;
}
else if (flag == 2)
{
printf("很遗憾,您输了!\n");
break;
}
computer_move(board); // 计算机走棋
display_board(board);
flag = judge(board, ROW - 1, COL - 1, c); // 判断胜负
if (flag == 1)
{
printf("很遗憾,您输了!\n");
break;
}
else if (flag == 2)
{
printf("恭喜您,你赢了!\n");
break;
}
}
if (i == ROW * COL / 2)
{
printf("平局!\n");
}
return 0;
}
// 初始化棋盘
void init_board(char board[ROW][COL])
{
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
board[i][j] = '+';
}
}
}
// 显示棋盘
void display_board(char board[ROW][COL])
{
int i, j;
printf(" ");
for (i = 0; i < ROW; i++)
{
printf("%2d ", i + 1);
}
printf("\n");
for (i = 0; i < ROW; i++)
{
printf("%2d ", i + 1);
for (j = 0; j < COL; j++)
{
printf("%2c ", board[i][j]);
}
printf("\n");
}
}
// 玩家走棋
void player_move(char board[ROW][COL])
{
int x, y;
printf("请您输入要落子的位置(例如:3,4):");
scanf("%d,%d", &x, &y);
getchar();
while (board[x - 1][y - 1] != '+')
{
printf("该位置已经有棋子,请重新输入落子位置!");
scanf("%d,%d", &x, &y);
getchar();
}
board[x - 1][y - 1] = 'B';
}
// 计算机走棋
void computer_move(char board[ROW][COL])
{
int x, y;
printf("轮到计算机走棋了!\n");
// 简单的随机走棋算法
do
{
x = rand() % ROW;
y = rand() % COL;
} while (board[x][y] != '+');
board[x][y] = 'W';
printf("计算机在 (%d,%d) 落了一个白棋。\n", x + 1, y + 1);
}
// 判断胜负
int judge(char board[ROW][COL], int x, int y, char c)
{
int i, j, k;
int flag1, flag2, flag3, flag4;
for (i = 0; i <= x; i++)
{
for (j = 0; j <= y; j++)
{
if (board[i][j] == c)
{
flag1 = flag2 = flag3 = flag4 = 1;
for (k = 1; k < 5; k++)
{
if (i + k > x || board[i + k][j] != c) // 判断行方向
{
flag1 = 0;
}
if (j + k > y || board[i][j + k] != c) // 判断列方向
{
flag2 = 0;
}
if (i + k > x || j + k > y || board[i + k][j + k] != c) // 判断右斜方向
{
flag3 = 0;
}
if (i + k > x || j - k < 0 || board[i + k][j - k] != c) // 判断左斜方向
{
flag4 = 0;
}
}
if (flag1 || flag2 || flag3 || flag4)
{
if (c == 'B')
{
return 1; // 玩家胜利
}
else
{
return 2; // 计算机胜利
}
}
}
}
}
return 0; // 没有胜负
}
```
这只是一个简单的五子棋代码示例,可能存在一些问题,如控制台输入输出没有进行错误处理,计算机走棋算法比较简单等等。您可以根据自己的需要进行修改和完善。