写一个五子棋c语言代码
时间: 2023-06-05 09:07:04 浏览: 142
好的,以下是五子棋C语言代码示例:
```c
#include <stdio.h>
#define SIZE 15
int board[SIZE][SIZE]; // 棋盘,0表示空,1表示黑子,-1表示白子
int player = 1; // 当前玩家,1表示黑子,-1表示白子
void draw_board() {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
switch (board[i][j]) {
case 0:
printf("+ ");
break;
case 1:
printf("* ");
break;
case -1:
printf("O ");
break;
}
}
printf("\n");
}
}
int is_valid_move(int x, int y) {
if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) { // 超出范围
return 0;
}
if (board[x][y] != 0) { // 不是空位置
return 0;
}
return 1;
}
int check_win(int x, int y) {
int i, j, k;
// 检查横向
for (i = x - 4; i <= x; i++) {
if (i < 0 || i + 4 >= SIZE) continue;
for (j = i; j <= i + 4; j++) {
if (board[j][y] != player) break;
}
if (j == i + 5) return 1;
}
// 检查竖向
for (i = y - 4; i <= y; i++) {
if (i < 0 || i + 4 >= SIZE) continue;
for (j = i; j <= i + 4; j++) {
if (board[x][j] != player) break;
}
if (j == i + 5) return 1;
}
// 检查左上到右下
for (i = x - 4, j = y - 4; i <= x && j <= y; i++, j++) {
if (i < 0 || i + 4 >= SIZE || j < 0 || j + 4 >= SIZE) continue;
for (k = 0; k < 5; k++) {
if (board[i+k][j+k] != player) break;
}
if (k == 5) return 1;
}
// 检查左下到右上
for (i = x + 4, j = y - 4; i >= x && j <= y; i--, j++) {
if (i >= SIZE || i - 4 < 0 || j < 0 || j + 4 >= SIZE) continue;
for (k = 0; k < 5; k++) {
if (board[i-k][j+k] != player) break;
}
if (k == 5) return 1;
}
return 0;
}
int main() {
int x, y, valid;
// 初始化棋盘
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
board[i][j] = 0;
}
}
// 开始游戏循环
while (1) {
// 绘制棋盘
draw_board();
// 输出当前玩家
printf("Player %d's turn:\n", player);
// 获取下棋位置
do {
printf("Enter x y: ");
scanf("%d %d", &x, &y);
valid = is_valid_move(x, y);
if (!valid) {
printf("Invalid move, try again.\n");
}
} while (!valid);
// 下棋
board[x][y] = player;
// 检查胜负
if (check_win(x, y)) {
printf("Player %d wins!\n", player);
draw_board();
break;
}
// 切换玩家
player = -player;
}
return 0;
}
```
阅读全文