【发布时间】:2015-09-04 17:29:56
【问题描述】:
我为井字游戏问题编写了一个代码,您将数字输入到数组中,然后将打印出棋盘。还有一个宣布获胜者的函数,但似乎不起作用,该函数应该宣布任何尺寸的井字棋棋盘的获胜者(现在是 5x5)。
我做了一个双循环,它检查数组中的字符是否与它旁边的字符相同,所以它沿着行移动,还有另一个用于列,一个对角线和另一个。出于某种原因,它没有显示任何赢家,总是没有赢家出现。任何帮助表示赞赏。
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define SIZE 3
#define NONE -1
#define NOUGHTS 0
#define CROSSES 1
#define EMPTY 2
void scanBoard(int board[SIZE][SIZE]);
void printBoard(int board[SIZE][SIZE]);
int getWinner(int board[SIZE][SIZE]);
int main( void ){
int board[SIZE][SIZE];
int winner;
printf("Please enter the board:\n");
scanBoard( board );
printf("Here is the board:\n");
printBoard( board );
printf("The winner is: ");
winner = getWinner(board);
if(winner == CROSSES){
printf("Crosses");
}
else if(winner == NOUGHTS){
printf("Noughts");
}
else{
printf("No one");
}
return 0;
}
void scanBoard(int board[SIZE][SIZE]){
int i;
int j;
for(i=0; i<SIZE; i++){
for(j=0; j<SIZE; j++){
scanf("%d", &board[i][j]);
}
}
}
void printBoard(int board[SIZE][SIZE]){
int i;
int j;
for(i=0; i<SIZE; i++){
for(j=0; j<SIZE; j++){
if(board[i][j] == EMPTY){
printf(". ");
}
else if(board[i][j] == CROSSES){
printf("X ");
}
else if(board[i][j] == NOUGHTS){
printf("O ");
}
}
printf("\n");
}
}
int getWinner(int board[SIZE][SIZE]){
int i;
int j;
int check;
int winner;
for(i=0; i<SIZE; i++){
for(j=0; j<SIZE-1 && check == TRUE; j++){
if(board[i][j] != board[i][j+1]){
check = FALSE;
}
}
if(check == TRUE && j == SIZE-1){
winner=board[i][0];
}
}
for(j=0; j<SIZE; j++){
for(i=0; i<SIZE-1 && check == TRUE; i++){
if(board[i][j] != board[i+1][j]){
check = FALSE;
}
}
if(check == TRUE && i == SIZE-1){
winner=board[0][j];
}
}
for(i=0; i<SIZE-1 && check == TRUE; i++){
if(board[i][i] != board[i+1][i+1]){
check = FALSE;
}
if(check == TRUE && i == SIZE-1){
winner=(board[i][i]);
}
}
for(i=SIZE; i>0 && check == TRUE; i--){
if( board[i][i] != board[i-1][i-1])
check = FALSE;
}
if(check == TRUE && i == SIZE-1){
winner=(board[i][i]);
}
return winner;
}
【问题讨论】:
标签: c