2010-07-30 4 views
0

La fonction de vérification des espaces vides ne fonctionne pas. Ceci est un jeu de tic tac toe. Donc, cette fonction vérifie après chaque coup si quelqu'un a gagné la partie ou si c'est une égalité. Après que quelqu'un gagne ou qu'il y ait une égalité, le plateau doit être réinitialisé et le jeu doit être redémarré. Je n'arrive pas à faire fonctionner la fonction de check-in vide. S'il vous plaît, aidez-moi à résoudre ce problème.Problèmes liés à la vérification de la fonction Entrée de tableau avec les instructions IF

checkboard devrait vérifier chaque entrée des utilisateurs pour voir si ce jeu a gagné. Le checkboard doit donc vérifier si playerOne a Xs dans une ligne ou en diagonale ou si playerTwo a Os de cette manière ou s'il y a égalité. Si le joueur gagne ou s'il y a un match nul, il indique qui a gagné ou s'il y a égalité, puis demande à l'utilisateur s'il veut rejouer ou quitter le programme. De leur réponse, le tableau est réinitialisé ou le jeu se termine. Le problème que je pense est que bGameOver continue à sortir vrai, peu importe quoi. J'ai mis après le code avant le gameover bGameOver = false et le proggram a fonctionné comme il était supposé le faire. Donc, où dans les instructions if, il continue à faire bGameOver = true après 1 mouvement.

Après il est résolu, je voudrais des suggestions sur la façon de l'améliorer seulement après que le problème est résolu.

#include <iostream> 
#include <string> 




void checkboard(char** CurrentPlayer, char (&squares)[3][3], char &playerMarker, bool bGameOver,char playerOne[]); 


using namespace std; 

void main() 
{ 
char board[3][3]; 
    board[0][0] = ' '; 
    board[0][1] = ' '; 
    board[0][2] = ' '; 
    board[1][0] = ' '; 
    board[1][1] = ' '; 
    board[1][2] = ' '; 
    board[2][0] = ' '; 
    board[2][1] = ' '; 
    board[2][2] = ' '; 
bool bGameOver(true); 
char playerMarker; 


    // Main game loop 
    do 
    { 

     showboard(board); 

     boardMarker(playerTurn, playerOne, playerTwo, playerMarker, &currentPlayer); 

     playerMove(currentPlayer, board, playerMarker); 

     checkboard(&currentPlayer, board, playerMarker, bGameOver, playerOne); 

     alternatePlayers(playerTurn); 

    } 
    while (!bGameOver); 
    } 



    void showboard(char (&board)[3][3]) 
    { 
     for(int i = 0; i < 3; ++i) 
     { 
      for(int j = 0; j < 3; ++j) 
      { 
       cout << board[i][j]; 
       if(j < 2) cout << "|"; 
      } 
      cout << "\n"; 
      if(i < 2) cout << "-+-+-" << endl;; 
     } 
    } 


    void playerMove(char* CurrentPlayer, char (&board)[3][3], char &playerMarker) 
    { 
    bool bValidMove; 
    int x,y; 
    // Prompt the player for a move 
    cout << "Player " << CurrentPlayer << "'s move:" << endl; 



    // Loop until we get a valid move 
    do 
    { 
     cout << "Please enter the row number for the place you wish to mark: " << endl; 
     cin >> x; 
     cout << "Please enter the column number for the place you wish to mark" << endl; 
     cin >> y; 
     bValidMove = true; 

     // Check for a valid move 
     if (x == 1 && y == 1) 
     { 
     board[0][0] = playerMarker; 
     } 
     else if (x == 1 && y == 2) 
     { 
     board[0][1] = playerMarker; 
     } 
     else if (x == 1 && y == 3) 
     { 
     board[0][2] = playerMarker; 
     } 
     else if (x == 2 && y == 1) 
     { 
     board[1][0] = playerMarker; 
     } 
     else if (x == 2 && y == 2) 
     { 
     board[1][1] = playerMarker; 
     } 
     else if (x == 2 && y == 3) 
     { 
     board[1][2] = playerMarker; 
     } 
     else if (x == 3 && y == 1) 
     { 
     board[2][0] = playerMarker; 
     } 
     else if (x == 3 && y == 2) 
     { 
     board[2][1] = playerMarker; 
     } 
     else if (x == 3 && y == 3) 
     { 
     board[2][2] = playerMarker; 
     } 
     else 
     { 
     cout << "Invalid Move. Try again." << endl; 
     bValidMove = false; 
     } 

    } 
    while (!bValidMove); 

    } 

    void checkboard(char** CurrentPlayer, char (&board)[3][3], char &playerMarker, bool bGameOver, char playerOne[100]) 
{ 

     bGameOver  = false; 
     bool bWinGame = true; 
     // Check for end of game conditions 
    do 
    { 
     if (board[0][0] = playerMarker) 
     { 
      if (board[0][1] == board[0][0] && board[0][2] == board[0][0]) { 
       bGameOver = true; 
      } 
      if (board[1][0] == board[0][0] && board[2][0] == board[0][0]) { 
       bGameOver = true; 
      } 
     } 
     if (board[1][1] != playerMarker) 
     { 
      if (board[0][0] == board[1][1] && board[2][2] == board[1][1]) 
      { 
       bGameOver = true; 
      } 
      if (board[0][1] == board[1][1] && board[2][1] == board[1][1]) 
      { 
       bGameOver = true; 
      } 
      if (board[1][0] == board[1][1] && board[1][2] == board[1][1]) 
      { 
       bGameOver = true; 
      } 
      if (board[0][2] == board[1][1] && board[2][0] == board[1][1]) 
      { 
       bGameOver = true; 
      } 
     } 
     if (board[2][2] != playerMarker) 
     { 
      if (board[0][2] == board[2][2] && board[1][2] == board[2][2]) 
      { 
       bGameOver = true; 
      } 
      if (board[2][0] == board[2][2] && board[2][1] == board[2][2]) 
      { 
       bGameOver = true; 
      } 
     } 
     // Need to check the board full (no-win condition) 
     if (board[0][0] != playerMarker && board[0][1] != playerMarker && board[0][2] != playerMarker && 
      board[1][0] != playerMarker && board[1][1] != playerMarker && board[1][2] != playerMarker && 
      board[2][0] != playerMarker && board[2][1] != playerMarker && board[2][2] != playerMarker && !bGameOver) 
     { 
      bGameOver = true; 
      bWinGame = false; 
     } 

     system("cls"); 

     if (bGameOver) 
     { 
      if (bWinGame) 
      { 
       cout << "Player " << CurrentPlayer << " wins!" << endl; 
      } 
      // Print ending board 

     for(int i = 0; i < 3; ++i) 
     { 
      for(int j = 0; j < 3; ++j) 
      { 
      cout << board[i][j]; 
      if(j < 2) cout << "|"; 
      } 
      cout << "\n"; 
      if(i < 2) cout << "-+-+-" << endl;; 
     } 

      cout << "Game Over!" << endl; 
      cout << "Play again (y/n)?" << endl; 
      char cPlayAgain; 
      cin >> cPlayAgain; 

      if (cPlayAgain == 'y') 
      { 
       bGameOver = false; 
       // Clear the board 
       board[0][0] = ' '; 
       board[0][1] = ' '; 
       board[0][2] = ' '; 
       board[1][0] = ' '; 
       board[1][1] = ' '; 
       board[1][2] = ' '; 
       board[2][0] = ' '; 
       board[2][1] = ' '; 
       board[2][2] = ' '; 
      } 
     *CurrentPlayer = playerOne; 
     } 

} while (!bGameOver); 
} 
+1

Dupe de http://stackoverflow.com/questions/3369478/checking-an-array-for-results-using-a-function-closed par le même utilisateur. –

+0

Cette question était fermée, donc je pensais que je devais commencer une nouvelle question avec l'information qu'ils voulaient – Renge

+0

Je n'ai pas fait d'analyse correcte (c'est un peu spaghetti-ish) mais la ligne "if (board [0] [0] = '1') {"est probablement faux s/= /! =/ –

Répondre

0

Que diriez-vous si vous utilisez la signature:

void checkboard(char** CurrentPlayer, char** squares, char &playerMarker, bool bGameOver,char playerOne[]); 

Bien que je pense que ce n'est pas la seule chose que vous devez changer, je vous recommande de lire un peu plus sur les tableaux et les pointeurs, et pratiquez-le avec des programmes plus petits.

Je ne sais pas comment vous avez pu coder tout cela sans remarquer que ça ne fonctionnait pas comme prévu.

Je ne sais pas si quelqu'un va prendre le temps et FIX votre programme pour vous. C'est devoirs.

+0

Erreur c2664: 'checkboard': impossible de convertir le paramètre 2 de 'char [3] [3]' à 'char **' C'est le erreur de construction que je reçois de faire cela – Renge

+0

Maintenant, je suis sûr que vous faites vos devoirs. = D – karlphillip

+0

C'est les devoirs, mais je suis coincé c'est que j'ai demandé de l'aide – Renge

0
if (board[0][0] = playerMarker) 

Ceci affectera toujours playerMarker dans le tableau [0] [0]. Vous devez vous habituer à la différence entre "=" (affectation) et "==" (la question "sont-elles égales?"), Cf. Yoda Conditions bien que cela ne vous aiderait pas ici.

Questions connexes