
❝hello,大家好,我是程序员黎明 ,许多人学完C语言后只知道概念却不知道怎么去写一个项目出来,本期我将教大家怎么去用c语言写一个五子棋程序出来,其中包括棋盘初始化、玩家下棋、判断胜负等核心步骤
写五子棋这个程序,用C语言实现的话,其实不复杂,只要掌握了基本的编程技巧,就能实现。下面来跟我一起学习吧!
第一步:定义棋盘
五子棋的棋盘通常是一个15x15的格子,咱们可以用一个二维数组来表示。二维数组就像是一个表格,棋盘的每个格子对应数组中的一个元素。我们用0表示空格,用1表示黑子,用2表示白子。
#include <stdio.h>
#define BOARD_SIZE 15 // 棋盘的大小
int board[BOARD_SIZE][BOARD_SIZE]; // 定义一个15x15的棋盘
上面定义了一个15x15的二维数组board,初始情况下,数组里的每个格子都应该是0,表示还没有棋子。
第二步:初始化棋盘
要让程序正常运行,我们得先把棋盘初始化一下,也就是把所有的格子都设置为0,表示空位。
void initBoard() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
board[i][j] = 0; // 初始化棋盘,所有格子都为空
}
}
}
这个initBoard函数就是用来初始化棋盘的,遍历了整个二维数组,把每个格子都设为0。
第三步:显示棋盘
有了棋盘,我们还得能看到棋盘上的情况,所以我们需要一个函数来把棋盘打印出来。可以用不同的符号表示棋子,比如空格用.表示,黑子用X表示,白子用O表示。
void printBoard() {
printf(" ");
for (int i = 0; i < BOARD_SIZE; i++) {
printf("%2d", i); // 打印列号
}
printf("\n");
for (int i = 0; i < BOARD_SIZE; i++) {
printf("%2d ", i); // 打印行号
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == 0) {
printf(". ");
} else if (board[i][j] == 1) {
printf("X ");
} else if (board[i][j] == 2) {
printf("O ");
}
}
printf("\n");
}
}
这个函数会把整个棋盘打印到屏幕上,X表示黑子,O表示白子,空格用.表示。打印出来后,看起来就像是一个真正的五子棋棋盘。
第四步:下棋
五子棋的核心就是下棋。我们可以用两个玩家轮流在棋盘上选择位置来放棋子。棋子放到哪个位置,我们可以让用户输入行号和列号,然后检查这个位置是否为空。如果为空,就放上对应的棋子。
void placePiece(int player) {
int row, col;
while (1) {
printf("玩家 %d 请输入你要下棋的位置 (行 列): ", player);
scanf("%d %d", &row, &col);
if (row >= 0 && row < BOARD_SIZE && col >= 0 && col < BOARD_SIZE && board[row][col] == 0) {
board[row][col] = player; // 1表示黑子,2表示白子
break;
} else {
printf("无效的位置,请重新输入!\n");
}
}
}
这里我用的是placePiece函数让玩家输入想要下棋的位置,程序会检查输入的坐标是否合理(是否在棋盘范围内,且该位置是否为空),如果有效,就把棋子放在对应的格子里。
第五步:判断胜负
五子棋的胜负规则很简单,谁先在横、竖、斜方向连成五颗棋子就赢了。我们需要写一个函数来判断某个玩家下完棋后有没有赢。
int checkWin(int player, int row, int col) {
int directions[4][2] = {{1, 0}, {0, 1}, {1, 1}, {1, -1}}; // 四个方向:横,竖,正斜,反斜
for (int d = 0; d < 4; d++) {
int count = 1;
// 向一个方向数
for (int i = 1; i < 5; i++) {
int newRow = row + i * directions[d][0];
int newCol = col + i * directions[d][1];
if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE && board[newRow][newCol] == player) {
count++;
} else {
break;
}
}
// 向反方向数
for (int i = 1; i < 5; i++) {
int newRow = row - i * directions[d][0];
int newCol = col - i * directions[d][1];
if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE && board[newRow][newCol] == player) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1; // 赢了
}
}
return 0; // 没赢
}
这个checkWin函数会检查当前玩家下的棋子有没有形成五连珠。如果某个方向上有五个连续的棋子,返回1表示赢了,否则返回0。
第六步:主程序逻辑
最后,我们把所有的功能都组合在一起,写一个主函数控制游戏的流程。两个玩家轮流下棋,每下完一次棋后都检查有没有人赢。如果有人赢了,游戏结束。
int main() {
initBoard(); // 初始化棋盘
int currentPlayer = 1; // 1表示黑子,2表示白子
while (1) {
printBoard(); // 显示当前棋盘
placePiece(currentPlayer); // 当前玩家下棋
// 检查是否胜利
if (checkWin(currentPlayer, row, col)) {
printBoard();
printf("玩家 %d 获胜!\n", currentPlayer);
break;
}
// 切换玩家
currentPlayer = (currentPlayer == 1) ? 2 : 1;
}
return 0;
}
主函数里,程序会不停地打印棋盘、让玩家下棋、检查是否有人赢了。玩家1下完棋后换2,如果有人连成五颗棋子就宣布获胜。
总结
写五子棋的C语言程序主要分为这几步:
-
定义并初始化棋盘。 -
打印棋盘。 -
让玩家输入下棋的位置。 -
检查有没有人赢。 -
两个玩家轮流下棋,直到有人获胜。
整个程序的核心就是二维数组的操作和循环判断,非常适合大家练习C语言的基本技能哦!好了,本期我们就学到这里啦,我们下期不见不散!


