试图确定谁在一场游戏中获胜,我是编程新手。当前正在获取用户只在输入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;
}

最佳答案

我会用如下的方法,使用循环。注意,由于棋盘被初始化为零,将赢家分配到一个仍然为零的棋盘位置意味着即使所有相等通过的测试都没有找到赢家。

//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;
}

10-07 15:27