下面我将详细讲解如何用C语言实现三子棋游戏。
实现思路
三子棋游戏是一款非常经典的井字棋类游戏,实现起来并不复杂。游戏的基本规则是:先手方执“X”,后手方执“O”,两人交替落子,先将三个同色棋子排成一行、一列或一对角线的一方获胜。
为了实现三子棋游戏,我们需要按照如下步骤进行:
- 绘制棋盘
- 判断游戏是否结束
- 获取玩家输入
- 判断输入是否合法
- 落子并更新棋盘
- 判断胜负并输出结果
- 交换玩家顺序并重复以上步骤
代码实现
下面是用C语言实现三子棋游戏的示例代码:
#include <stdio.h>
char board[3][3]; // 棋盘
char players[2] = {'X', 'O'}; // 玩家
int current_player = 0; // 当前玩家
void init_board() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
void draw_board() {
printf(" 1 2 3\n");
printf(" -------\n");
for (int i = 0; i < 3; i++) {
printf("%d|", i + 1);
for (int j = 0; j < 3; j++) {
printf("%c|", board[i][j]);
}
printf("\n");
printf(" -------\n");
}
}
int check_winner() {
// 判断行
for (int i = 0; i < 3; i++) {
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') {
return 1;
}
}
// 判断列
for (int j = 0; j < 3; j++) {
if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ') {
return 1;
}
}
// 判断对角线
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') {
return 1;
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ') {
return 1;
}
return 0;
}
int get_input(int *row, int *col) {
printf("玩家 %c,请输入行号和列号(用空格隔开):", players[current_player]);
scanf("%d %d", row, col);
*row -= 1;
*col -= 1;
if (*row < 0 || *row > 2 || *col < 0 || *col > 2) {
printf("输入无效,请重新输入!\n");
return 0;
}
if (board[*row][*col] != ' ') {
printf("该位置已经有棋子了,请重新输入!\n");
return 0;
}
return 1;
}
void play_game() {
int row, col;
int winner = 0;
int round = 0;
init_board();
while (!winner && round < 9) {
draw_board();
if (get_input(&row, &col)) {
board[row][col] = players[current_player];
winner = check_winner();
current_player = (current_player + 1) % 2;
round++;
}
}
draw_board();
if (winner) {
printf("玩家 %c 获胜!\n", players[(current_player + 1) % 2]);
} else {
printf("游戏结束,平局!\n");
}
}
int main() {
play_game();
return 0;
}
上述代码中定义了一个3x3的棋盘board
,用空格表示空位,用“X”和“O”表示两个玩家的棋子;定义了玩家数组players
和当前玩家current_player
。
实现了几个基本函数:
init_board()
:初始化棋盘,将棋盘上所有位置都设为空格。draw_board()
:绘制棋盘,用循环打印出棋盘的每一行和每一列。check_winner()
:判断是否有一方胜利,通过检查每一行、每一列和每一个对角线是否有三个同色棋子来实现。get_input()
:获取玩家输入,判断输入是否合法,返回行和列的值。play_game()
:主函数,实现了游戏的整个流程,每一轮循环交替进行两个玩家的操作,直到有一个玩家胜利或者平局。
示例说明
示例一
假设当前是玩家“X”落子:
1 2 3
-------
1|X| |O|
-------
2| |X|O|
-------
3|O| |X|
-------
玩家 X,请输入行号和列号(用空格隔开):
玩家输入“1 2”表示在第1行第2列放置棋子:
1 2 3
-------
1|X|X|O|
-------
2| |O|O|
-------
3|O| |X|
-------
玩家 O,请输入行号和列号(用空格隔开):
以此类推,直到出现胜利或者平局。
示例二
假设当前是玩家“O”落子:
1 2 3
-------
1|X| |O|
-------
2| |X|O|
-------
3|O| | |
-------
玩家 O,请输入行号和列号(用空格隔开):
玩家输入“3 3”表示在第3行第3列放置棋子:
1 2 3
-------
1|X| |O|
-------
2| |X|O|
-------
3|O| |O|
-------
玩家 X,请输入行号和列号(用空格隔开):
以此类推,直到出现胜利或者平局。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用C语言实现三子棋 - Python技术站