用c语言写一个五子棋程序的代码
时间: 2023-12-03 11:02:06 浏览: 123
以下是一个简单的五子棋程序,它可以在终端界面上进行游戏。
```
#include <stdio.h>
#include <stdlib.h>
#define BOARD_SIZE 15
// 棋盘
char board[BOARD_SIZE][BOARD_SIZE];
// 初始化棋盘
void init_board() {
int i, j;
for (i = 0; i < BOARD_SIZE; i++) {
for (j = 0; j < BOARD_SIZE; j++) {
board[i][j] = '+';
}
}
}
// 打印棋盘
void print_board() {
int i, j;
printf(" ");
for (i = 0; i < BOARD_SIZE; i++) {
printf("%d ", i + 1);
}
printf("\n");
for (i = 0; i < BOARD_SIZE; i++) {
printf("%d ", i + 1);
for (j = 0; j < BOARD_SIZE; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
// 判断是否赢了
int is_win(char c) {
int i, j, k, count;
// 横向
for (i = 0; i < BOARD_SIZE; i++) {
for (j = 0; j < BOARD_SIZE - 4; j++) {
count = 0;
for (k = j; k < j + 5; k++) {
if (board[i][k] == c) {
count++;
}
}
if (count == 5) {
return 1;
}
}
}
// 纵向
for (j = 0; j < BOARD_SIZE; j++) {
for (i = 0; i < BOARD_SIZE - 4; i++) {
count = 0;
for (k = i; k < i + 5; k++) {
if (board[k][j] == c) {
count++;
}
}
if (count == 5) {
return 1;
}
}
}
// 斜向
for (i = 0; i < BOARD_SIZE - 4; i++) {
for (j = 0; j < BOARD_SIZE - 4; j++) {
count = 0;
for (k = 0; k < 5; k++) {
if (board[i+k][j+k] == c) {
count++;
}
}
if (count == 5) {
return 1;
}
}
}
// 反斜向
for (i = 0; i < BOARD_SIZE - 4; i++) {
for (j = 4; j < BOARD_SIZE; j++) {
count = 0;
for (k = 0; k < 5; k++) {
if (board[i+k][j-k] == c) {
count++;
}
}
if (count == 5) {
return 1;
}
}
}
return 0;
}
// 下棋
void play(char c) {
int x, y;
printf("请输入坐标(例如:3 4):");
scanf("%d %d", &x, &y);
while (x < 1 || x > BOARD_SIZE || y < 1 || y > BOARD_SIZE || board[x-1][y-1] != '+') {
printf("坐标不合法,请重新输入:");
scanf("%d %d", &x, &y);
}
board[x-1][y-1] = c;
}
int main() {
init_board();
print_board();
char c = 'X';
while (!is_win('X') && !is_win('O')) {
printf("轮到%c下棋\n", c);
play(c);
print_board();
if (c == 'X') {
c = 'O';
} else {
c = 'X';
}
}
printf("%c赢了!\n", c);
return 0;
}
```
该程序实现了一个简单的人机对战游戏,玩家执黑棋,计算机执白棋。在每次下棋前,计算机会计算当前局面下最优的走法,并输出到控制台。
阅读全文