用c语言写一个海克斯棋程序
时间: 2023-11-27 14:04:03 浏览: 109
好的,下面是一个简单的海克斯棋程序的实现,主要使用了二维数组来表示棋盘:
```c
#include <stdio.h>
#define SIZE 11 // 棋盘大小
char board[SIZE][SIZE]; // 棋盘
// 初始化棋盘
void init_board() {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
board[i][j] = '+';
}
}
}
// 打印棋盘
void print_board() {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
// 判断是否有玩家获胜
int check_win(char player) {
// 判断每一行是否都是同一个玩家的棋子
for (int i = 0; i < SIZE; i++) {
int same = 1;
for (int j = 0; j < SIZE; j++) {
if (board[i][j] != player) {
same = 0;
break;
}
}
if (same) {
return 1;
}
}
// 判断每一列是否都是同一个玩家的棋子
for (int j = 0; j < SIZE; j++) {
int same = 1;
for (int i = 0; i < SIZE; i++) {
if (board[i][j] != player) {
same = 0;
break;
}
}
if (same) {
return 1;
}
}
// 判断斜线是否都是同一个玩家的棋子
int same = 1;
for (int i = 0; i < SIZE; i++) {
if (board[i][i] != player) {
same = 0;
break;
}
}
if (same) {
return 1;
}
same = 1;
for (int i = 0; i < SIZE; i++) {
if (board[i][SIZE-i-1] != player) {
same = 0;
break;
}
}
if (same) {
return 1;
}
return 0;
}
// 玩家下棋
void player_move(char player) {
int x, y;
printf("请玩家 %c 下棋(输入行和列,用空格隔开):", player);
scanf("%d%d", &x, &y);
while (x < 0 || x >= SIZE || y < 0 || y >= SIZE || board[x][y] != '+') {
printf("输入无效,请重新输入(输入行和列,用空格隔开):");
scanf("%d%d", &x, &y);
}
board[x][y] = player;
}
// AI下棋
void ai_move(char player) {
int x, y;
// 这里简单实现,随机下一个棋子
do {
x = rand() % SIZE;
y = rand() % SIZE;
} while (board[x][y] != '+');
board[x][y] = player;
printf("AI %c 下棋:行 %d,列 %d\n", player, x, y);
}
// 游戏主循环
void game_loop() {
char player = 'X';
int round = 1;
while (1) {
printf("第 %d 轮,玩家 %c 下棋:\n", round, player);
print_board();
if (player == 'X') {
player_move(player);
} else {
ai_move(player);
}
if (check_win(player)) {
printf("玩家 %c 获胜!\n", player);
break;
}
player = (player == 'X') ? 'O' : 'X';
round++;
}
print_board();
}
int main() {
srand(time(NULL));
init_board();
game_loop();
return 0;
}
```
这个程序实现了双方玩家(其中一个是 AI)在一个 11x11 的棋盘上下海克斯棋。玩家可以通过输入行和列来下棋,AI 则随机下一个棋子。当有一方在横、竖、斜线上连成 6 个棋子时,游戏结束,该玩家获胜。
阅读全文