c语言五子棋代码加入菜单包括开始进入游戏,结束游戏,复盘,悔棋
时间: 2023-08-12 17:40:17 浏览: 104
deamond,c语言五子棋悔棋源码,c语言项目
好的,下面是一个简单的C语言五子棋代码,其中包括了开始进入游戏、结束游戏、复盘和悔棋的菜单功能。请注意,这个代码只是一个简单的示例,可以根据需要进行修改和完善。
```
#include <stdio.h>
#include <stdlib.h>
#define ROW 15
#define COL 15
int board[ROW][COL]; // 棋盘
int turn; // 玩家轮流下棋
int endgame; // 游戏是否结束
// 初始化棋盘
void init_board() {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
board[i][j] = 0;
}
}
}
// 显示棋盘
void display() {
int i, j;
printf(" ");
for (i = 0; i < COL; i++) {
printf("%c ", 'A' + i);
}
printf("\n");
for (i = 0; i < ROW; i++) {
printf("%2d", i + 1);
for (j = 0; j < COL; j++) {
if (board[i][j] == 0) {
printf(" +");
} else if (board[i][j] == 1) {
printf(" X");
} else if (board[i][j] == 2) {
printf(" O");
}
}
printf("\n");
}
}
// 判断是否胜利
int win(int row, int col) {
int i, j, k;
int count;
// 水平方向
count = 1;
for (i = col - 1; i >= 0 && board[row][i] == turn; i--) {
count++;
}
for (i = col + 1; i < COL && board[row][i] == turn; i++) {
count++;
}
if (count >= 5) {
return 1;
}
// 垂直方向
count = 1;
for (i = row - 1; i >= 0 && board[i][col] == turn; i--) {
count++;
}
for (i = row + 1; i < ROW && board[i][col] == turn; i++) {
count++;
}
if (count >= 5) {
return 1;
}
// 左上到右下方向
count = 1;
for (i = row - 1, j = col - 1; i >= 0 && j >= 0 && board[i][j] == turn; i--, j--) {
count++;
}
for (i = row + 1, j = col + 1; i < ROW && j < COL && board[i][j] == turn; i++, j++) {
count++;
}
if (count >= 5) {
return 1;
}
// 右上到左下方向
count = 1;
for (i = row - 1, j = col + 1; i >= 0 && j < COL && board[i][j] == turn; i--, j++) {
count++;
}
for (i = row + 1, j = col - 1; i < ROW && j >= 0 && board[i][j] == turn; i++, j--) {
count++;
}
if (count >= 5) {
return 1;
}
return 0;
}
// 下棋
void play() {
int row, col;
printf("请 %c 方下棋:\n", turn == 1 ? 'X' : 'O');
while (1) {
printf("请输入行和列(例如:3D):");
char input[10];
scanf("%s", input);
if (input[0] < '1' || input[0] > '9' ||
input[1] < 'A' || input[1] > 'A' + COL - 1 ||
input[2] != '\0') {
printf("输入不合法,请重新输入!\n");
continue;
}
row = input[0] - '1';
col = input[1] - 'A';
if (board[row][col] != 0) {
printf("此位置已经有棋子,请重新输入!\n");
continue;
}
break;
}
board[row][col] = turn;
if (win(row, col)) {
printf("%c 方胜利!\n", turn == 1 ? 'X' : 'O');
endgame = 1;
}
turn = 3 - turn; // 轮换玩家
}
// 开始游戏
void start_game() {
init_board();
display();
turn = 1;
endgame = 0;
while (!endgame) {
play();
display();
}
}
// 复盘
void replay() {
int i, j, step = 0;
while (1) {
printf("请输入步数(1-%d):", ROW * COL);
scanf("%d", &step);
if (step < 1 || step > ROW * COL) {
printf("输入不合法,请重新输入!\n");
continue;
}
break;
}
init_board();
for (i = 0; i < step; i++) {
int row = rand() % ROW;
int col = rand() % COL;
while (board[row][col] != 0) {
row = rand() % ROW;
col = rand() % COL;
}
board[row][col] = i % 2 + 1;
}
display();
}
// 悔棋
void undo() {
int i, j;
for (i = ROW - 1; i >= 0; i--) {
for (j = COL - 1; j >= 0; j--) {
if (board[i][j] != 0) {
board[i][j] = 0;
display();
return;
}
}
}
}
int main() {
int choice;
while (1) {
printf("五子棋游戏\n");
printf("1. 开始游戏\n");
printf("2. 结束游戏\n");
printf("3. 复盘\n");
printf("4. 悔棋\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
start_game();
break;
case 2:
printf("谢谢使用!\n");
return 0;
case 3:
replay();
break;
case 4:
undo();
break;
default:
printf("输入不合法,请重新输入!\n");
break;
}
}
return 0;
}
```
注意:这个代码只是一个简单的示例,可能存在一些问题。如果您需要在实际应用中使用,请自行进行修改和完善。
阅读全文