能不能做个c语言五子棋小游戏
时间: 2023-07-31 14:12:23 浏览: 44
当然可以!以下是一个简单的 C 语言五子棋小游戏的示例代码,你可以参考一下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BOARD_SIZE 15
char board[BOARD_SIZE][BOARD_SIZE]; // 棋盘数组
void init_board() {
memset(board, '.', sizeof(board)); // 初始化棋盘
}
void print_board() {
printf("\n ");
for (int i = 0; i < BOARD_SIZE; i++) {
printf("%2d ", i + 1);
}
printf("\n");
for (int i = 0; i < BOARD_SIZE; i++) {
printf("%2d ", i + 1);
for (int j = 0; j < BOARD_SIZE; j++) {
printf("%2c ", board[i][j]);
}
printf("\n");
}
}
int check_win(int x, int y, char c) {
int count = 1;
// 横向
for (int i = x + 1; i < BOARD_SIZE && board[i][y] == c; i++, count++);
for (int i = x - 1; i >= 0 && board[i][y] == c; i--, count++);
if (count >= 5) return 1;
count = 1;
// 纵向
for (int i = y + 1; i < BOARD_SIZE && board[x][i] == c; i++, count++);
for (int i = y - 1; i >= 0 && board[x][i] == c; i--, count++);
if (count >= 5) return 1;
count = 1;
// 正斜线
for (int i = x + 1, j = y + 1; i < BOARD_SIZE && j < BOARD_SIZE && board[i][j] == c; i++, j++, count++);
for (int i = x - 1, j = y - 1; i >= 0 && j >= 0 && board[i][j] == c; i--, j--, count++);
if (count >= 5) return 1;
count = 1;
// 反斜线
for (int i = x - 1, j = y + 1; i >= 0 && j < BOARD_SIZE && board[i][j] == c; i--, j++, count++);
for (int i = x + 1, j = y - 1; i < BOARD_SIZE && j >= 0 && board[i][j] == c; i++, j--, count++);
if (count >= 5) return 1;
return 0;
}
int main() {
init_board();
char player1[20], player2[20];
printf("请输入玩家1的姓名:");
scanf("%s", player1);
printf("请输入玩家2的姓名:");
scanf("%s", player2);
int x, y, flag = 0;
char c;
for (int i = 0; i < BOARD_SIZE * BOARD_SIZE; i++) {
print_board();
if (i % 2 == 0) {
printf("\n轮到 %s 下棋,棋子为 X\n", player1);
c = 'X';
} else {
printf("\n轮到 %s 下棋,棋子为 O\n", player2);
c = 'O';
}
printf("请输入下棋的坐标(如 2 3):");
scanf("%d %d", &x, &y);
if (x < 1 || x > BOARD_SIZE || y < 1 || y > BOARD_SIZE) {
printf("坐标超出范围,请重新输入!\n");
i--;
continue;
}
if (board[x - 1][y - 1] != '.') {
printf("该位置已有棋子,请重新输入!\n");
i--;
continue;
}
board[x - 1][y - 1] = c;
if (check_win(x - 1, y - 1, c)) {
flag = 1;
printf("\n%s 获胜!\n", i % 2 == 0 ? player1 : player2);
break;
}
}
print_board();
if (!flag) {
printf("\n平局!\n");
}
return 0;
}
```
这个示例代码实现了一个简单的命令行界面五子棋小游戏,玩家1用 X 表示,玩家2用 O 表示。你可以根据需求进行修改和优化。