加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的Tic tac toe程序,胜利条件不起作用

发布时间:2020-12-16 07:14:49 所属栏目:百科 来源:网络整理
导读:这个程序可以让你在电脑上玩5×5 tic tac toe游戏.我将为计算机实现更聪明的动作,但首先我需要修复获胜的检查.如果你用柱子或对角线赢了,它可以工作,但是赢得一排只适用于第2行,而不是第4行或第5行.任何人都可以告诉我为什么?我只用C. #include stdio.h#inc
这个程序可以让你在电脑上玩5×5 tic tac toe游戏.我将为计算机实现更聪明的动作,但首先我需要修复获胜的检查.如果你用柱子或对角线赢了,它可以工作,但是赢得一排只适用于第2行,而不是第4行或第5行.任何人都可以告诉我为什么?我只用C.

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

char matrix[5][5];  /* the tic tac toe matrix */

char check(void);
void init_matrix(void);
void get_player_move(void);
void get_computer_move(void);
void disp_matrix(void);

int main(void)
{
  char done;

  printf("This is the game of Tic Tac Toe.n");
  printf("You will be playing against the computer.n");

  done =  ' ';
  init_matrix();

  do {
    disp_matrix();
    get_player_move();
    done = check(); /* see if winner */
    if(done!= ' ') break; /* winner!*/
    get_computer_move();
    done = check(); /* see if winner */
  } while(done== ' ');

  if(done=='X') printf("You won.n");
  else printf("Computer won.n");
  disp_matrix(); /* show final positions */

  return 0;
}

/* Initialize the matrix. */
void init_matrix(void)
{
  int i,j;

  for(i=0; i<5; i++)
    for(j=0; j<5; j++) matrix[i][j] =  ' ';
}

/* Get a player's move. */
void get_player_move(void)
{
  int x,y;

  printf("Enter X,Y coordinates for your move: ");
  scanf("%d%*c%d",&x,&y);

  x--; y--;

  if(matrix[x][y]!= ' '){
    printf("Invalid move,try again.n");
    get_player_move();
  }
  else matrix[x][y] = 'X';
}

/* Get a move from the computer. */
void get_computer_move(void)
{
  int i,j;
  for(i=0; i<5; i++){
    for(j=0; j<5; j++)
      if(matrix[i][j]==' ') break;
    if(matrix[i][j]==' ') break;
  }

  if(i*j==25)  {
    printf("Draw.n");
    exit(0);
  }
  else
    matrix[i][j] = 'O';
}

/* Display the matrix on the screen. */
void disp_matrix(void)
{
  int t;

  for(t=0; t<5; t++) {
    printf(" %c | %c | %c | %c | %c ",matrix[t][0],matrix[t][1],matrix [t][2],matrix[t][3],matrix[t][4]);
    if(t!=4) printf("n---|---|---|---|---n");
  }
  printf("n");
}

/* See if there is a winner. */
char check(void)
{
  int i;

  for(i=0; i<5; i++)  /* check rows */
    if(matrix[i][0]==matrix[i][1] &&
       matrix[i][0]==matrix[i][2] &&
       matrix[i][0]==matrix[i][3] &&
       matrix[i][0]==matrix[i][4]) return matrix[i][0];

  for(i=0; i<5; i++)  /* check columns */
    if(matrix[0][i]==matrix[1][i] &&
       matrix[0][i]==matrix[2][i] &&
       matrix[0][i]==matrix[3][i] &&
       matrix[0][i]==matrix[4][i]) return matrix[0][i];

  /* test diagonals */
  if(matrix[0][0]==matrix[1][1] &&
     matrix[1][1]==matrix[2][2] &&
     matrix[2][2]==matrix[3][3] &&
     matrix[3][3]==matrix[4][4])
       return matrix[0][0];

  if(matrix[0][4]==matrix[1][3] &&
     matrix[1][3]==matrix[2][2] &&
     matrix[2][2]==matrix[3][1] &&
     matrix[3][1]==matrix[4][0])
       return matrix[0][4];

  return ' ';
}

解决方法

它不起作用,因为它将在完全空行上返回”.所以你必须实施一个额外的检查:

if(matrix[i][0]==matrix[i][1] &&
   matrix[i][0]==matrix[i][2] &&
   matrix[i][0]==matrix[i][3] &&
   matrix[i][0]==matrix[i][4] &&
   matrix[i][0] != ' ')
      return matrix[i][0];

这也适用于其他检查.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读