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]; 这也适用于其他检查. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |