用c编写一个五子棋程序
时间: 2024-05-10 09:17:51 浏览: 35
用c语言编写的五子棋程序
以下是一个简单的五子棋程序,使用C语言编写,实现了基本的游戏逻辑和界面展示。
```
#include <stdio.h>
#include <stdlib.h>
#define BOARD_SIZE 15
#define EMPTY 0
#define BLACK 1
#define WHITE 2
int board[BOARD_SIZE][BOARD_SIZE]; // 棋盘
int turn = BLACK; // 当前轮到哪方下棋
// 初始化棋盘
void init_board() {
int i, j;
for (i = 0; i < BOARD_SIZE; i++) {
for (j = 0; j < BOARD_SIZE; j++) {
board[i][j] = EMPTY;
}
}
}
// 画出棋盘
void print_board() {
int i, j;
printf(" ");
for (i = 0; i < BOARD_SIZE; i++) {
printf("%c ", 'A' + i);
}
printf("\n");
for (i = 0; i < BOARD_SIZE; i++) {
printf("%2d ", i + 1);
for (j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == EMPTY) {
printf("+ ");
} else if (board[i][j] == BLACK) {
printf("X ");
} else {
printf("O ");
}
}
printf("%d\n", i + 1);
}
printf(" ");
for (i = 0; i < BOARD_SIZE; i++) {
printf("%c ", 'A' + i);
}
printf("\n");
}
// 判断胜负
int check_win(int x, int y) {
int i, j, k;
int count = 1; // 这里count初始化为1是因为已经有了一个子
int color = board[x][y];
// 水平方向
for (i = x - 1; i >= 0; i--) {
if (board[i][y] == color) {
count++;
} else {
break;
}
}
for (i = x + 1; i < BOARD_SIZE; i++) {
if (board[i][y] == color) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
// 垂直方向
count = 1;
for (j = y - 1; j >= 0; j--) {
if (board[x][j] == color) {
count++;
} else {
break;
}
}
for (j = y + 1; j < BOARD_SIZE; j++) {
if (board[x][j] == color) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
// 左上到右下方向
count = 1;
for (i = x - 1, j = y - 1; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == color) {
count++;
} else {
break;
}
}
for (i = x + 1, j = y + 1; i < BOARD_SIZE && j < BOARD_SIZE; i++, j++) {
if (board[i][j] == color) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
// 左下到右上方向
count = 1;
for (i = x + 1, j = y - 1; i < BOARD_SIZE && j >= 0; i++, j--) {
if (board[i][j] == color) {
count++;
} else {
break;
}
}
for (i = x - 1, j = y + 1; i >= 0 && j < BOARD_SIZE; i--, j++) {
if (board[i][j] == color) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
return 0;
}
// 下子
int drop(int x, int y) {
if (board[x][y] == EMPTY) {
board[x][y] = turn;
if (check_win(x, y)) {
return 1;
}
turn = (turn == BLACK) ? WHITE : BLACK;
return 0;
} else {
printf("此处已经有棋子,请重新下子!\n");
return -1;
}
}
int main() {
int x, y;
init_board();
while (1) {
print_board();
printf("%s 下子:", (turn == BLACK) ? "黑方" : "白方");
scanf("%d %d", &x, &y);
x--;
y = y - 'A';
if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE) {
printf("输入错误,请重新输入!\n");
continue;
}
if (drop(x, y) == 1) {
print_board();
printf("%s 获胜!\n", (turn == BLACK) ? "白方" : "黑方");
break;
}
}
return 0;
}
```
此程序实现了以下功能:
- 初始化棋盘
- 绘制棋盘
- 判断胜负
- 下子
- 控制游戏流程
你可以将代码复制到C语言编译器中运行。
阅读全文