C语言五子棋源代码
时间: 2023-06-21 08:07:49 浏览: 164
以下是一个简单的C语言五子棋游戏的源代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 15 // 棋盘大小
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() {
printf(" ");
for (int i = 0; i < SIZE; i++) {
printf("%2d ", i);
}
printf("\n");
for (int i = 0; i < SIZE; i++) {
printf("%2d ", i);
for (int j = 0; j < SIZE; j++) {
printf("%2c ", board[i][j]);
}
printf("\n");
}
}
// 判断是否胜利
int check_win(int x, int y) {
int i, j, count;
char c = board[x][y];
// 横向判断
count = 1;
for (i = x - 1; i >= 0 && board[i][y] == c; i--) count++;
for (i = x + 1; i < SIZE && board[i][y] == c; i++) count++;
if (count >= 5) return 1;
// 纵向判断
count = 1;
for (j = y - 1; j >= 0 && board[x][j] == c; j--) count++;
for (j = y + 1; j < SIZE && board[x][j] == c; j++) count++;
if (count >= 5) return 1;
// 左上到右下判断
count = 1;
for (i = x - 1, j = y - 1; i >= 0 && j >= 0 && board[i][j] == c; i--, j--) count++;
for (i = x + 1, j = y + 1; i < SIZE && j < SIZE && board[i][j] == c; i++, j++) count++;
if (count >= 5) return 1;
// 左下到右上判断
count = 1;
for (i = x - 1, j = y + 1; i >= 0 && j < SIZE && board[i][j] == c; i--, j++) count++;
for (i = x + 1, j = y - 1; i < SIZE && j >= 0 && board[i][j] == c; i++, j--) count++;
if (count >= 5) return 1;
return 0;
}
int main() {
int x, y, turn = 0;
init_board();
print_board();
while (1) {
printf("player %d's turn: ", turn % 2 + 1);
scanf("%d%d", &x, &y);
if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) {
printf("invalid position!\n");
continue;
}
if (board[x][y] != '+') {
printf("the position has been occupied!\n");
continue;
}
board[x][y] = turn % 2 == 0 ? 'X' : 'O';
print_board();
if (check_win(x, y)) {
printf("player %d wins!\n", turn % 2 + 1);
break;
}
turn++;
}
return 0;
}
```
这个示例代码中,使用一个二维数组 `board` 表示棋盘,字符 '+' 表示空位,字符 'X' 和 'O' 分别表示两个玩家的棋子。
在主循环中,每次轮到一个玩家下棋时,读入其输入的位置,并在棋盘上标记其棋子。然后判断是否胜利,如果是则输出胜利信息并退出循环。
阅读全文