如何用C语言玩编码井字游戏?(附教程)

206 阅读4分钟

用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;