2013-04-20 3 views
0

Что не так с логикой моей программы. По какой-то причине, когда я чередую очередь между игроком, момент, когда он достигает 2-го хода, он пропустит его, и игра, кажется, будет затянута на один шаг. Изменяется ли массив, даже когда я объявлял его над основной функцией? Место для игры в тиктакто:Что не так с логикой моей программы?

1 | 2 | 3


4 | 5 | 6


6 | 8 | 9

код

#include <stdio.h> 
int check(char player); 
void move(char player); 
void outprint(void); 
char board[3][3] ; 



int main(void) 
{ 
int first; 
char player1, player2; 

     printf("Player 1: Choose your symbol: \n"); 
     player1 = getchar(); 
     getchar(); 

     printf("Player 2: Choose your symbol: \n"); 
     player2 = getchar(); 
     getchar(); 



int i=0; 
int win; 
char turn; 
while(win == 0) 
{ 
     if((i%2) == 0){ 
       turn = player1; 
       move(player1); 
       win = check(player1); 
       outprint();} 
     else { 
       turn = player2; 
       move(player2); 
       win = check(player2); 
       outprint();} 
     i++; 
} 

     if (i == 8) 
       printf("its a tie"); 
     else 
       printf("the winner is %c", turn); 

return 0; 
} 

/*printing the board that takes in a placement int*/ 
void outprint(void) 
{ 
     int r; 
     printf("\n"); 
     for (r = 0; r < 3; r++){ 
       printf(" %c | %c | %c \n" , board[r][0], board[r][2], board[r][3]); 
     if (r != 2) 
       printf("___________\n"); 
     } printf("\n"); 
return; 
} 

/*check to see if someone won*/ 
int check(char player) 
{ 
     int r, c; 

     for (r = 0 ; r <3 ; r++) 
     { 
       if ((board[r][0] == player) && (board[r][1] == player) && (board[r][2] == player)) 
         return 1; 
     } 

     for (c = 0 ; c <3 ; c++) 
     { 
       if ((board[0][c] == player) && (board[1][c] == player) && (board[2][c] == player)) 
         return 1; 
     } 

     if((board[0][0] == player) && (board[1][1] == player) && (board[2][2] == player)) 
       return 1; 

     if((board[0][2] == player) && (board[1][1] == player) && (board[2][0] == player)) 
       return 1; 

     return 0; 
} 


void move(char player) 
{ 
     int place; 
     printf("player %c, enter placement: \n", player); 
     scanf("%d", &place); 

     if (place == 1) 
       board[0][0] = player; 
     else if (place == 2) 
       board[0][1] = player; 
     else if (place == 3) 
       board[0][2] = player; 

     else if (place == 4) 
       board[1][0] = player; 
     else if (place == 5) 
       board[1][1] = player; 
     else if (place == 6) 
       board[1][2] = player; 

     else if (place == 7) 
       board[2][0] = player; 
     else if (place == 8) 
       board[2][1] = player; 
     else if (place == 9) 
       board[2][2] = player; 
} 

выход

Player 1: Choose your symbol: 
x 
Player 2: Choose your symbol: 
o 
player x, enter placement: 
1 

x | | 
___________ 
    | | 
___________ 
    | | 

player o, enter placement: 
2 

x | | 
___________ 
    | | 
___________ 
    | | 

player x, enter placement: 
3 

x | x | 
___________ 
    | | 
___________ 
    | | 

player o, enter placement: 
4 

x | x | o 
___________ 
o | | 
___________ 
    | | 

player x, enter placement: 
5 

x | x | o 
___________ 
o | | 
___________ 
    | | 

player o, enter placement: 
6 

x | x | o 
___________ 
o | o | 
___________ 
    | | 

player x, enter placement: 
7 

x | x | o 
___________ 
o | o | x 
___________ 
x | | 

the winner is x 

ответ

0

попробовать добавить GetChar() в зсапЕ ("% D ", &) в вашей функции move(), точно так же, как то, что вы сделали в первой входной записи:

void move(char player) 
{ 
    int place; 
    printf("player %c, enter placement: \n", player); 
    scanf("%d", &place); 
    getchar(); 
1

Похоже, что вам необходимо инициализировать плату пространствам.

char board[3][3] = { " ", " ", " " }; 

Похоже, вы ничего не печатаете. Вероятно, непечатаемый мусор из неинициализированных данных.

2

1, В void outprint(void), изменить

printf(" %c | %c | %c \n" , board[r][0], board[r][2], board[r][3]); 

в

printf(" %c | %c | %c \n" , board[r][0], board[r][1], board[r][2]); 

2, В int main(void), изменить int win; в int win = 0;

Смежные вопросы