用c语言写一个五子棋程序
时间: 2023-11-12 13:03:50 浏览: 70
用c语言编写的五子棋程序
好的,以下是一个简单的五子棋程序:
```c
#include <stdio.h>
#include <stdbool.h>
#define BOARD_SIZE 15
#define EMPTY 0
#define BLACK 1
#define WHITE 2
int board[BOARD_SIZE][BOARD_SIZE];
// 初始化棋盘
void init_board() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
board[i][j] = EMPTY;
}
}
}
// 打印棋盘
void print_board() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
switch(board[i][j]) {
case EMPTY:
printf("+ ");
break;
case BLACK:
printf("O ");
break;
case WHITE:
printf("X ");
break;
}
}
printf("\n");
}
printf("\n");
}
// 判断是否胜利
bool is_win(int player) {
// 判断横向是否连成五子
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j <= BOARD_SIZE - 5; j++) {
bool win = true;
for (int k = 0; k < 5; k++) {
if (board[i][j+k] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
}
// 判断纵向是否连成五子
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j <= BOARD_SIZE - 5; j++) {
bool win = true;
for (int k = 0; k < 5; k++) {
if (board[j+k][i] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
}
// 判断从左上角到右下角是否连成五子
for (int i = 0; i <= BOARD_SIZE - 5; i++) {
for (int j = 0; j <= BOARD_SIZE - 5; j++) {
bool win = true;
for (int k = 0; k < 5; k++) {
if (board[i+k][j+k] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
}
// 判断从右上角到左下角是否连成五子
for (int i = 0; i <= BOARD_SIZE - 5; i++) {
for (int j = 4; j < BOARD_SIZE; j++) {
bool win = true;
for (int k = 0; k < 5; k++) {
if (board[i+k][j-k] != player) {
win = false;
break;
}
}
if (win) {
return true;
}
}
}
return false;
}
int main() {
int player = BLACK; // 黑子先手
init_board();
print_board();
while (true) {
int x, y;
printf("请输入 %s 的落子位置(例如:3 4):", player == BLACK ? "黑子" : "白子");
scanf("%d %d", &x, &y);
if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE) {
printf("输入的落子位置无效,请重新输入\n");
continue;
}
if (board[x][y] != EMPTY) {
printf("该位置已经有棋子,请重新输入\n");
continue;
}
board[x][y] = player;
print_board();
if (is_win(player)) {
printf("%s 胜利!\n", player == BLACK ? "黑子" : "白子");
break;
}
player = player == BLACK ? WHITE : BLACK; // 切换玩家
}
return 0;
}
```
这个程序使用了一个二维数组来表示棋盘,其中 `EMPTY` 表示空格,`BLACK` 表示黑子,`WHITE` 表示白子。程序主要包含了三个函数:
- `init_board()`:用于初始化棋盘,将所有格子设置为 `EMPTY`。
- `print_board()`:用于打印当前的棋盘状态。
- `is_win()`:用于判断当前玩家是否胜利。
在 `main()` 函数中,程序会循环让玩家输入落子的位置,将该位置上的格子设置为当前玩家的棋子,并判断当前玩家是否胜利。如果胜利,就输出胜利信息并结束游戏。如果不胜利,就切换玩家并继续游戏,直到有一方胜利为止。
阅读全文