2013-03-29 4 views
-1

Мне нужно создать программу Tic Tac Toe, используя C++. все правильно, но основная функция, с которой я столкнулся. Это не позволит мне вызвать любую из функций из основной функции. Это также говорит мне, что совет и советы не используются, и randint не объявлен в этой области. Я попытался оставить круглые скобки после того, как имя функции пустое, что тоже не работает. Я потерял сейчас, вот мой код:Tic Tac Toe Program

/* 
    Template for TicTacToe.cpp (CS-509 Assignment 5) 

    Fill in the rest of this comment block. 
*/ 


#include<iostream> 
using namespace std; 

/* 
    Game status enumeration 
*/ 
enum Status { WIN, DRAW, CONTINUE, QUIT }; 


/* 
    Function prototypes 
*/ 
// showBoard: Show current state of board 
void showBoard(const char board[], int boardSize); 
// checkGameState: Returns WIN or CONTINUE 
Status checkGameState(const char board[]); 
int getHumanSquare(const char board[]); 
int getComputerSquare(const char board[]); 
// checkBadSquare: Checks to see if a chosen square is already taken; returns 
//     true if already taken; used by getHumanSquare and 
//     getComputerSquare functions above. 
bool checkBadSquare(const char board[], int squareNum); 
int getrandint(int min, int max); 



int main() 
{ 
    char board[] = "123456789"; // 10 element char board 
    const int boardSize = 10; 
    Status gameState = CONTINUE; 
    int gametype, squareChoice, turnNum = 0; 
    char currentSymbol;   // 'o' or 'x' 


    cout << "\n This is a Tic Tac Toe program. Choose the type of game: " 
     << "\n (1) human o vs. human x (2) human o vs. dumb computer x" 
     << "\n\n -> "; 
    cin >> gametype; 


    /* Show the current state of Tic Tac Toe board. */ 
    cout << gameState; 




    /* 
     Main game loop 
    */ 
    while (gameState == CONTINUE) 
    { 


     /* Increment turnNum by 1. */ 
     turnNum++; 
     /* If turnNum equal to 10 
       Set gameState to DRAW. 
       Break out of while loop. */ 
     if (turnNum = 10) 
     { 
      gameState = DRAW; 
      break; 
     } 
     /* If we are on an odd-numbered turn 
       Print "It's o's turn." 
       Set currentSymbol to 'o'. 
       Call getHumanSquare function to get squareChoice.*/ 
     if (turnNum%2 != 0) 
     { 
      cout << "It's o's turn."; 
      currentSymbol = 'o'; 
      int getHumanSquare() 
      { 

       return board; 
      } 
     } 
     /* Else (we are on an even-numbered turn) 
      Print "It's x's turn." 
      Set currentSymbol to 'x'. */ 
     else 
     { 
      cout << "It's x's turn."; 
      currentSymbol = 'x'; 
     } 


     /* If the gametype is 1 (human vs. human) 
       Call getHumanSquare function to get squareChoice.*/ 
     if (gametype == 1) 
     { 
      int getHumanSquare(int squareNum) 
      { 
       return board; 
      } 
     } 

     /* Else (gametype is 2 (human vs. computer)) 
      Call getComputerSquare function to get squareChoice. */ 
     else 
     { 
      int getComputerSquare(int squareNum) 
      { 
       return board; 
      } 
     } 

     /* If squareChoice is -1 (human player quit) 
       Set gameState to QUIT.*/ 
     if (squareChoice == -1) 
     { 
      gameState = QUIT; 
     } 

     /* Else 
      Insert currentSymbol into board at (squareChoice - 1). 
      Show the current state of the Tic Tac Toe board. 
      Call checkGameState function to determine the gameState. */ 
     else 
     { 
      bool checkBadSquare(int squareNum) 
      { 
       return board; 
      } 
      Status checkGameState(); 
     } 
    } 

    // end while 


    /* If gameState is WIN 
      print "Player " currentSymbol " is the winner." */ 
    if (gameState == WIN) 
     cout << "Player " currentSymbol " is the winnter."; 

    /* If gameState is DRAW 
      print "It's a draw." */ 
    if (gameState == DRAW) 
     cout << "It's a draw."; 

    return 0; 
} 

///////////////////////////////////////////////////////////////////// 

void showBoard(const char board [], int size) 
{ 
    cout << endl; 

    for (int i = 0; i < size ; i++) 
    { 
     cout << board[ i ] << " "; 
     if ((i + 1) % 3 == 0) 
      cout << endl; 
    } 

    cout << endl; 
} 

///////////////////////////////////////////////////////////////////// 

Status checkGameState(const char board[]) 
{ 
    // Board  Array 
    // 
    // 1 2 3  0 1 2 
    // 4 5 6 --> 3 4 5 
    // 7 8 9  6 7 8 
    // 
    // Diagonal winners 
    if (board[ 0 ] == board[ 4 ] && board[ 0 ] == board[ 8 ]) 
     return WIN; 
    else if (board[ 2 ] == board[ 4 ] && board[ 4 ] == board[ 6 ]) 
     return WIN; 
    // Horizontal winners 
    else if (board[ 0 ] == board[ 1 ] && board[ 1 ] == board[ 2 ]) 
     return WIN; 
    else if (board[ 3 ] == board[ 4 ] && board[ 4 ] == board[ 5 ]) 
     return WIN; 
    else if (board[ 6 ] == board[ 7 ] && board[ 7 ] == board[ 8 ]) 
     return WIN; 
    // Vertical winners 
    else if (board[ 0 ] == board[ 3 ] && board[ 3 ] == board[ 6 ]) 
     return WIN; 
    else if (board[ 1 ] == board[ 4 ] && board[ 4 ] == board[ 7 ]) 
     return WIN; 
    else if (board[ 2 ] == board[ 5 ] && board[ 5 ] == board[ 8 ]) 
     return WIN; 
    else 
     // No one has won yet 
     return CONTINUE; 
} 

///////////////////////////////////////////////////////////////////// 

int getHumanSquare(const char board[]) 
{ 
    int squareNum; 

    cout << "\n Input the number of an empty square: (-1 to quit) "; 
    cin >> squareNum; 

    while (checkBadSquare(board, squareNum) == true) 
    { 
     cout << "\n Bad input. Choose another square: "; 
     cin >> squareNum; 
    } 

    return squareNum; 
} 

///////////////////////////////////////////////////////////////////// 

int getComputerSquare(const char board[]) 
{ 
    int squareNum; 

    squareNum = getrandint(1, 9); 

    while (checkBadSquare(board, squareNum) == true) 
    { 
     squareNum = getrandint(1, 9); 
    } 

    return squareNum; 
} 

///////////////////////////////////////////////////////////////////// 

bool checkBadSquare(const char board[], int squareNum) 
{ 
    int realSquareNum = squareNum - 1; // count from 0 

    if (squareNum == -1) 
     return false; // Let quit code pass as a valid square 
    else if (squareNum > 9) 
     return true; // Square numbers out of range are invalid 
    else if (board[ realSquareNum ] == 'o' || board[ realSquareNum ] == 'x') 
     return true; // Already taken squares are invalid 
    else 
     return false; // Valid square number 
} 

///////////////////////////////////////////////////////////////////// 

int getrandint(int min, int max) 
{ 
    int scale, shift; 
    scale = max - min + 1; 
    shift = min; 
    return randint() % scale + shift; 
} 
+1

Я понятия не имею, о чем вы говорите, прочитав описание ошибок. У меня была бы неплохая идея, если бы я увидел фактические ошибки. – chris

+0

Вы вызываете свои функции двумя разными способами в вашем коде ('while (checkBadSquare (board, squareNum) == true)' vs. 'bool checkBadSquare (int squareNum) { return board; }'). Выберите тот, который * не * выдает ошибки и придерживается этого. – chris

+0

'if (turnNum = 10)' должно быть 'if (turnNum == 10)' – dreamlax

ответ

1

Скорее всего, ваши проблемы связаны пятна, отмеченные здесь:

int main() { 

/* ... lots of other code here ... */ 

     if (turnNum%2 != 0) 
     { 
      /* doesn't call the globally known function getHumanSquare() 
       but defines a new function getHumanSquare local to the scope 
       if your compiler allows anyhow. 
      */ 

      int getHumanSquare() 
      { 

       return board; 
      } 
     } 

     /* ... still more code here ... */ 

     if (gametype == 1) 
     { 
      /* same problem again */ 
      int getHumanSquare(int squareNum) 
      { 
       return board; 
      } 
     } 

    /* ... I stopped further reading here ... */ 

То, что вы, скорее всего, пытается сделать вместо этого будет выглядеть следующим образом:

int main() { 

/* ... lots of other code here ... */ 

     if (turnNum%2 != 0) 
     { 
      int result; 
      result = getHumanSquare (board); 

      /* ... perform some interesting action with the result here */ 
     } 

     /* ... I hope you got the point ... */ 

Таким образом, вы бы вызов функция getHumanSquare вместо того, чтобы пытаться определить новый.