写一个五子棋c语言小游戏
时间: 2023-08-25 07:14:05 浏览: 105
以下是一个简单的基于控制台的五子棋C语言小游戏示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROWS 15
#define COLS 15
// 棋盘
char board[ROWS][COLS];
// 初始化棋盘
void init_board() {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
board[i][j] = '+';
}
}
}
// 显示棋盘
void print_board() {
printf(" ");
for (int i = 0; i < COLS; i++) {
printf("%c ", 'A' + i);
}
printf("\n");
for (int i = 0; i < ROWS; i++) {
printf("%2d", i + 1);
for (int j = 0; j < COLS; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
// 判断是否胜利
int is_win(char c) {
// 判断行
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS - 4; j++) {
if (board[i][j] == c && board[i][j+1] == c && board[i][j+2] == c && board[i][j+3] == c && board[i][j+4] == c) {
return 1;
}
}
}
// 判断列
for (int i = 0; i < ROWS - 4; i++) {
for (int j = 0; j < COLS; j++) {
if (board[i][j] == c && board[i+1][j] == c && board[i+2][j] == c && board[i+3][j] == c && board[i+4][j] == c) {
return 1;
}
}
}
// 判断主对角线
for (int i = 0; i < ROWS - 4; i++) {
for (int j = 0; j < COLS - 4; j++) {
if (board[i][j] == c && board[i+1][j+1] == c && board[i+2][j+2] == c && board[i+3][j+3] == c && board[i+4][j+4] == c) {
return 1;
}
}
}
// 判断副对角线
for (int i = 0; i < ROWS - 4; i++) {
for (int j = 4; j < COLS; j++) {
if (board[i][j] == c && board[i+1][j-1] == c && board[i+2][j-2] == c && board[i+3][j-3] == c && board[i+4][j-4] == c) {
return 1;
}
}
}
return 0;
}
int main() {
int x, y;
char player = 'O';
init_board();
print_board();
while (1) {
printf("Player %c's turn.\n", player);
printf("Enter the row and column (e.g., 1A): ");
scanf("%d%c", &x, &y);
x--; // 行号从0开始
y -= 'A'; // 列号从0开始
if (x < 0 || x >= ROWS || y < 0 || y >= COLS || board[x][y] != '+') {
printf("Invalid input. Please try again.\n");
continue;
}
board[x][y] = player;
print_board();
if (is_win(player)) {
printf("Player %c wins!\n", player);
break;
}
if (player == 'O') {
player = 'X';
} else {
player = 'O';
}
}
return 0;
}
```
在上面的代码中,我们首先定义了棋盘的大小(15x15),并使用`init_board`函数初始化棋盘为初始状态(所有位置都是'+')。然后,我们使用`print_board`函数打印当前的棋盘状态。
在每个玩家的回合中,我们使用`scanf`函数输入玩家的行和列。需要注意的是,行号从1开始,但是我们的数组是从0开始编号的,因此需要将输入的行号减去1。列号是一个字母,但是我们的数组是用数字表示的,因此需要将输入的列号减去'A'。如果输入的行或列不在合法的范围内,或已经有棋子了,我们会提示玩家重新输入。
在每个玩家下完棋子后,我们使用`is_win`函数检查是否有五个棋子连成一线。如果是,我们输出胜利者并退出游戏。如果没有胜者,则交换玩家,并继续下一回合。
需要注意的是,此代码示例是基于控制台的,因此无法实现图形化的界面。同时,由于没有实现人机对战和网络对战等功能,只能用于双人对战。
阅读全文