【问题标题】:TicTacToe print winner井字游戏打印获胜者
【发布时间】:2014-06-26 02:32:47
【问题描述】:

我正在尝试与两名玩家进行井字游戏。我很远,它在大多数情况下都有效。我不知道如何打印出存储在数组中的字符串。我已经看到很多循环作为示例。请让我知道发生了什么。

在此处输入代码

    int main()
   {    time_t t;
char player1 [23];
char  player2 [23];
int Let;
int Turns = 0;

printf("\n Welcome to Galactic Tic Tac Toe:\n");
    printf("\n Please enter player 1's name");
    fgets(player1, 22, stdin);
    printf("\nPlayer 2's name?\n");
    fgets(player2, 22, stdin);

void winner (char board [][9], char player1 [][23], char player2 [][23]){
if (board [0][0] && board [0][1] && board [0][2] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][3] && board [0][4] && board [0][5] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][6] && board [0][7] && board [0][8] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][0] && board [0][1] && board [0][2] == 'O'){printf("\nPlayer 2 has won\n Congratulations : %s ", player2);}
if (board [0][3] && board [0][4] && board [0][5] == 'O'){printf("\nPlayer 2 has won\n Congratulations : %s ", player2);}
if (board [0][6] && board [0][7] && board [0][8] == 'O'){printf("\nPlayer 2 has won\n Congratulations : %s ", player2);}
if (board [0][0] && board [0][5] && board [0][8] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}    
if (board [0][2] && board [0][5] && board [0][7] == 'X'){printf("\nPlayer 1 has won\n Congratulations : %s ", player1);}
if (board [0][0] && board [0][5] && board [0][8] == 'O'){printf("\nPlayer 1 has won\n Congratulations : %s ", player2);}
if (board [0][2] && board [0][5] && board [0][7] == 'O'){printf("\nPlayer 1 has won\n Congratulations : %s ", player2);}

}

【问题讨论】:

  • 我也可以添加开始代码来提供帮助。老实说,我一直不太了解打印循环以及为什么它们通常用于数组。
  • 是的,对不起,就像我说的是全新的,我刚刚发布它我想我搞砸了初始化......也许

标签: c arrays string printf tic-tac-toe


【解决方案1】:

你最大的问题:

if (board [0][0] && board [0][1] && board [0][2] == 'X')

这个做你认为它做的事。您可能假设这会检查是否所有三个空格都标有'X'。这是不正确的。

&& 是一个布尔 AND 运算符,这意味着左侧和右侧运算符被(独立地)评估为 布尔值。所以你写的意思是:

if (                     // if
   board[0][0]           // board[0][0] is non-zero 
   &&                    // and
   board[0][1]           // board[0][1] is non-zero
   &&                    // and
   board[0][2] == 'X'    // board[0][2] is equal to 'X'
)

你还没有展示你是如何初始化你的板子的(大概有一个空格' '),但是你在那里存储的任何(可打印)字符都将被评估为布尔值 TRUE。

所以这个表达式应该是:

if ((board[0][0] == 'X') && (board[0][1] == 'X') && (board[0][2] == 'X'))

下一个问题:

老实说,我一直不太了解打印循环以及为什么它们通常用于数组。

没有打印循环这样的东西。只有循环。如果需要,可以循环调用printf

要了解为什么我们需要循环,请考虑一个不同版本的井字游戏,其中棋盘为 100 x 100。您的“有人赢了吗?”那么逻辑是怎样的呢?

应该很容易看出,编码if( board[0][0] .... board[99][99] 和所有可能的组合很快就会让人类编码感到筋疲力尽。另一方面,计算机喜欢重复执行相同(或相似)的任务。确保将精力花在有用的事情上取决于人(您)。

【讨论】:

  • 是的,这绝对需要修复! +1
  • 那太疯狂了,感谢您的帮助。这是初始化。
【解决方案2】:

我认为您的 printf 有问题,因为 player1 和 player2 是 char** 但 printf 需要 char*。

【讨论】:

  • 我该如何改变?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多