2012-01-22 2 views
-1

Вот мой код для моего крестики-нолики игры:Ошибки в моей Tic-Tac-Toe игры

#include <stdio.h> 
#include <stdbool.h> 
#include <string.h> 

int board[3][3] = { 
         {0, 0, 0}, 
         {0, 0, 0}, 
         {0, 0, 0} 
        }; 

int main (void) 
{ 
    int const user1 = 1; 
    int const user2 = 2; 
    char move[10]; 

    while (! all_locations_filled()) { 
     printf("User-1, please enter your move:"); 
     scanf("%s", move); 

     if(valid_location(move)) { 
      mark_location(user1, move); 
      display_board(board[3][3]); 
     } 
     else if(won_the_game(user1)) { 
      printf("Congratulations User-1, You Won the Game!"); 
      break; 
     } 
     else { 
      printf("Invalid Move"); 
     } 

     printf("User-2, please enter your move:"); 
     scanf("%s", move); 

     if(valid_location(move)) { 
      mark_location(user2, move); 
      display_board(); 
     } 
     else if(won_the_game(user2) { 
      printf("Congratulations User-2, You Won the Game!"); 
      break; 
     } 
     else { 
      printf("Invalid Move"); 
     } 
    } 

    return 0; 
} 

bool valid_location(char str[10]) { 
    int strcmp(x, y); 

    if (strcmp(str[10], "upperLeft") == 0 || strcmp(str[10], "up") == 0 || strcmp(str[10], "upperRight") == 0 || strcmp(str[10], "left") == 0 || strcmp(str[10], "center") == 0 || strcmp(str[10], "right") == 0 || strcmp(str[10], "lowerLeft") == 0 || strcmp(str[10], "down") == 0 || strcmp(str[10], "lowerRight") == 0) 
     return true; 
} 

void mark_location(int userU, char str[10]) { 
    int strcmp(x, y); 

    if (strcmp(str[10], "upperLeft") == 0) 
     board[0][0] = userU; 
    else if (strcmp(str[10], "up") == 0) 
     board[0][1] = userU; 
    else if (strcmp(str[10], "upperRight") == 0) 
     board[0][2] = userU; 
    else if (strcmp(str[10], "left") == 0) 
     board[1][0] = userU; 
    else if (strcmp(str[10], "center") == 0) 
     board[1][1] = userU; 
    else if (strcmp(str[10], "right") == 0) 
     board[1][2] = userU; 
    else if (strcmp(str[10], "lowerLeft") == 0) 
     board[2][0] = userU; 
    else if (strcmp(str[10], "down") == 0) 
     board[2][1] = userU; 
    else if (strcmp(str[10], "lowerRight") == 0) 
     board [2][2] = userU; 
} 

char display_board(int array[][]) { 
    int i, j; 

    for (i=0; i<3; ++i) 
     for (j=0; j<3; ++j) 
      if (array[i][j] == 0) 
       print("-"); 
      else if (array[i][j] == 1) 
       print("x"); 
      else if (array[i][j] == 2) 
       print("o"); 
} 

bool all_locations_filled() { 
    int i, j; 

    for (i=0; i<3; ++i) 
     for (j=0; j<3; ++j) 
      if board[i][j] == 0 
       return false; 
    return true; 
} 

bool won_the_game(userU) { 
    int i, j; 

    if (board[0][0] == userU && board[0][1] == userU && board[0][2] == userU) 
     return true; 
    else if (board[1][0] == userU && board[1][1] == userU && board[1][2] == userU) 
     return true; 
    else if (board[2][0] == userU && board[2][1] == userU && board[2][2] == userU) 
     return true; 
    else if (board[0][0] == userU && board[1][0] == userU && board[2][0] == userU) 
     return true; 
    else if (board[0][1] == userU && board[1][1] == userU && board[2][1] == userU) 
     return true; 
    else if (board[0][2] == userU && board[1][2] == userU && board[2][2] == userU) 
     return true; 
    else if (board[0][0] == userU && board[1][1] == userU && board[2][2] == userU) 
     return true; 
    else if (board[2][2] == userU && board[1][1] == userU && board[2][0] == userU) 
     return true; 
    else 
     return false; 
} 

Есть несколько ошибок, которые я не понимаю, вот они:

tictactoe.c:50: error: expected expression before ‘}’ token 

Эта ошибка находится в конце основной функции, но я не уверен, что я сделал неправильно.

tictactoe.c:52: error: nested functions are disabled, use -fnested-functions to re-enable 

Я не знал, что использовал вложенную функцию.

tictactoe.c:53: warning: parameter names (without types) in function declaration 

Это относится к Int STRCMP (х, у)

tictactoe.c:55: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast 

Что я сделал не так с STRCMP?

Если кто-то может мне помочь, я бы очень признателен.

+0

Как и другие идентифицированные проблемы, у вас есть 'bool valid_location (char str [10]) { int strcmp (x, y); 'Я предполагаю, что это попытка объявить' strcmp() '; вам не нужно это делать, потому что вы включили '', и вы не можете сделать это так, даже если вы хотите это сделать (потому что' x' и 'y' не являются типами, для грязных деталей о том, почему , вы хотите написать 'int strcmp (const char * s1, const char * s2);' если вы действительно хотели объявить эту функцию). –

ответ

3

Вы пропустили закрывающую скобку здесь (линия № 40):

else if(won_the_game(user2) { 

Должно быть:

else if(won_the_game(user2)) { 
+0

Большое спасибо. – user1064913

2

У вас есть пара или проблемы с strcmp, а также.

strcmp(str[10], "upperRight") 

Компилятор жалуется первого параметра str[10]. Одна из проблем заключается в том, что это выбирает один символ из строки, а не всю строку. Другая проблема заключается в том, что в массиве размером 10 позиции нумеруются 0..9, поэтому нет даже позиции 10!

Кроме того, строковый литерал, такой как "upperRight", содержит 10 видимых символов plus дополнительный символ нулевой последовательности в качестве терминатора. Таким образом, он нуждается в 11 позициях при хранении в str.

+0

Как заставить strcmp распознать всю строку, а не только символ? – user1064913

+0

Передача всей строки :-) Используйте 'strcmp (str," some value ")', но убедитесь, что массив 'str' достаточно велик, чтобы удерживать строковое значение. –

+0

У меня такое же сообщение об ошибке. По-прежнему говорит, что передающий аргумент 1 'strcmp' делает указатель из целого без трансляции. Что именно это значит? – user1064913

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