c中的tic tac toe,试图确定谁获胜

时间:2014-07-29 20:15:08

标签: c tic-tac-toe

尝试确定谁在tic tac toe游戏中获胜,我是编程新手。目前只有输入1 X或O输入后才能赢得用户。输入必须输入2 int,row和coloumn。非常感谢任何帮助!

#include <stdio.h>
#include <stdlib.h>

void drawBoard(char board[][3])
{
    int rows, columns;
    for ( rows = 0 ; rows < 3 ; rows++ )
    {
            for ( columns = 0 ; columns < 3 ; columns++ )
            {
               if(board[rows][columns]){
                    printf( "|%c", board[rows][columns] );
                }else{
                   printf("| ");
                }
            }
            printf("|\n");
        }
}


 int main()
{
    char game[3][3]={{0}};
    int totalEntry =0,row,column;
    char value;

    while(totalEntry<=9){
         printf("Please choose x or o: ");
          scanf("%c",&value);
          getchar();
          printf("Enter row number: ");
          scanf("%d",&row);
          getchar();
          printf("Enter Column number: ");
          scanf("%d",&column);
          getchar();
          game[row][column] = value;
          drawBoard(game);

    if((game[0][0] == game[0][1]) && (game[0][1] == game[0][2]) && game[0][0] != 'x')
    if((game[1][0] == game[1][1]) && (game[1][1] == game[1][2]) && game[1][0] != 'x')
    if((game[2][0] == game[2][1]) && (game[2][1] == game[2][2]) && game[2][0] != 'x')
    if((game[0][0] == game[1][0]) && (game[1][0] == game[2][0]) && game[0][0] != 'x')
    if((game[0][1] == game[1][1]) && (game[1][1] == game[2][1]) && game[0][1] != 'x')
    if((game[0][2] == game[1][2]) && (game[1][2] == game[2][2]) && game[0][2] != 'x')
    if((game[0][0] == game[1][1]) && (game[1][1] == game[2][2]) && game[0][0] != 'x')
    if((game[2][0] == game[1][1]) && (game[1][1] == game[0][2]) && game[2][0] != 'x')
        printf("User x has won!");


    if((game[0][0] == game[0][1]) && (game[0][1] == game[0][2]) && game[0][0] != 'o')
    if((game[1][0] == game[1][1]) && (game[1][1] == game[1][2]) && game[1][0] != 'o')
    if((game[2][0] == game[2][1]) && (game[2][1] == game[2][2]) && game[2][0] != 'o')
    if((game[0][0] == game[1][0]) && (game[1][0] == game[2][0]) && game[0][0] != 'o')
    if((game[0][1] == game[1][1]) && (game[1][1] == game[2][1]) && game[0][1] != 'o')
    if((game[0][2] == game[1][2]) && (game[1][2] == game[2][2]) && game[0][2] != 'o')
    if((game[0][0] == game[1][1]) && (game[1][1] == game[2][2]) && game[0][0] != 'o')
    if((game[2][0] == game[1][1]) && (game[1][1] == game[0][2]) && game[2][0] != 'o');
        printf("User o has won!");
        break;


    }




    return 0;
}

3 个答案:

答案 0 :(得分:1)

IckIckIck。

首先,如果你使用一个包含9个元素的一维数组,它会让你的生活更轻松(至少对于确定胜利者而言)。

然后,编写一个测试一个可能获胜的函数并返回true或false。

bool Test(char board[9], char player, int a, int b, int c)
{  
     return  board[a] == player
          && board[b] == player
          && board[c] == player;
}

然后Test(game, 'x', 0,3,6); - x的测试胜过左侧。

答案 1 :(得分:1)

我会使用循环来使用类似的东西。请注意,由于电路板初始化为零,因此将赢家分配给仍为零的电路板位置意味着即使对所有相等的通过测试也未找到获胜者。

//declare this outside the main while-loop:
char winner=0;

for(i=0;i<3 && !winner;i++) {
  if(game[i][0]==game[i][1] && game[i][1]==game[i][2])
    winner=game[i][0]; // across
  else if(game[0][i]==game[1][i] && game[1][i]==game[2][i])
    winner=game[0][i]; // down
}
if( !winner && ( game[0][0]==game[1][1] && game[1][1]==game[2][2] ||
                 game[0][2]==game[1][1] && game[1][1]==game[2][0] ) )
  winner = game[1][1]; // diagonal

if(winner) {
  printf( "Winner is %c!\n",winner );
  break;
}

答案 2 :(得分:0)

条件中的逻辑不正确。想象一下,董事会看起来像这样。 0表示空白点。

0 0 0 
0 0 x 
0 0 0 

语句if((game[0][0] == game[0][1]) && (game[0][1] == game[0][2]) && game[0][0] != 'x')将评估为true,因为game[0][0]为空game[0][1]为空且game[0][2]为空,因此它们都相等。

此外,由于game[0][0]为空,因此不等于'x'

在这方面,将!=更改为==会有所帮助。