用C语言编码玩井字游戏
C语言的编程
井字游戏是全世界许多Python学习者都在进行的初级练习,包括我自己。C语言是我的主要编程语言,我想尝试一下,看看我是否能在C语言中建立同样的游戏,以下是我的做法。
第一步是决定如何实现这个游戏。为此,我需要5个不同的函数。
- 显示桌子(棋盘)的函数
- 在表格中插入一个 "X "或 "O "的函数
- 一个检查是否有人获胜的函数
- 一个检查平局的函数
- 一个额外的功能来帮助切换转牌
有了这个大纲,第一件事就是在我的主函数中创建棋盘。
char board[] = { ‘-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’ };
每个元素中的连字符意味着那里的单元格是空的,我们将在后面使用这个。
之后,我们编写我们的表格显示函数,如下所示。
void display_table(char board[]) { int i; for (i = 0; i < 9; i++) { printf("%c ", board[i]); if (((i + 1) % 3) == 0) { printf("\n"); } }}
请注意,我们在输出每3个单元格后打印一个新行。我们这样做是为了在我们的游戏板上创建下一行。当我们测试我们的函数时,输出应该是这样的。
- - -- - -- - -
在这之后,我们希望能够进行游戏,因此有了 "插入 "函数。插入函数将把轮到的人("X "或 "O")简单地插入到给定索引的单元格中,如下所示。
void insert(char board[],char *turn) {
int index;
printf("Turn of %c\nEnter index : ", *turn);
scanf("%d", &index);
if (index == SENTINEL) {
exit(0);
}
board[index - 1] = *turn;
}
注意:作为程序的一个出口,我在实现中定义了一个-999的SENTINEL值。这个步骤是可选的。
在一个玩家玩他/她的回合后,我们需要切换到另一个玩家。这就是切换回合的函数的用处。
void switch_turn(char *turn) { if (*turn == 'X') {*turn = 'O';} else {*turn = 'X';}}
这个函数相当简单。如果玩家 "X "已经玩了他/她的回合,"O "的值将被分配给回合变量。如果玩家 "O "已经玩了他/她的回合,"X "的值将被分配给它。
下一步是检查是否有玩家获胜,这一步实际上比大多数人一开始认为的要简单得多。让我们首先总结一下赢的条件。
- 玩家在同一行水平放置3个他/她的符号
- 玩家将他/她的3个符号垂直放在同一列上
- 玩家将他/她的3个符号斜放在其中一个轴上。
为了检查是否满足这些条件,我们可以使用各自的索引(如下所示)检查每个单元格,以检查它们是否匹配。
- 对于水平方向:(0,1,2),(3,4,5),(6,7,8)。
- 纵向:(0,3,6),(1,4,7),(2,5,8)。
- 对角线:(0,4,8),(2,4,6)。
如果这些指数组中的任何一个字符相匹配,我们就可以说该玩家赢了。我们用下面的函数来做。
bool check_win(char board[]) { bool win = false;
在这个函数中,我们有赢的变量来表示是否有任何条件被满足。
在每个条件的开始,我们检查每组的第一个单元格是否为空(等于"-")。如果是空的,我们就不检查该组。如果它不是空的,我们就检查每组的单元格是否包含相同的字符。
如果是的话,真布尔值将被分配给赢家变量,并被返回以表示玩家是否赢了。
最后,我们需要检查平局。要做到这一点,我们需要在主函数中创建一个变量来存储已经进行了多少个回合。之后,我们将简单地检查已经进行了多少个回合。如果少于9个,那么游戏可以继续进行。如果所有9个单元格都满了(意味着已经进行了9个回合),游戏将导致平局。
...int turn_count = 0;...bool check_draw(int turn_count) { if (turn_count < 9) { return false; } else { return true; }}
在这最后一个函数之后,我们需要我们将在主函数内的函数进行圆周率,使游戏完成。
在我们的主函数中,我们将创建一个游戏变量,并将真值分配给它。之后,我们将以游戏变量为条件创建一个无限的while循环。在这个循环中,我们将首先显示棋盘,让其中一个玩家使用他们的回合。在玩家使用他/她的回合后,我们将检查是否有玩家赢了,或者游戏的结果是平局。如果这两个条件都不满足,就会切换到下一回合,并提示下一个玩家使用他/她的回合。
int main() { char turn = 'X', board[] = { '-','-','-','-','-','-','-','-','-' }; bool game = true; int turn_count = 0;