2010-07-30 5 views
0

Existe-t-il un moyen de stocker les x et y saisis par l'utilisateur dans un emplacement pour le tableau.Stockage des emplacements dans Array en tant que variable à modifier dans une instruction if

J'ai ceci:

if (x == 1 && y == 1) 
     { 
      board[0][0] = playerMarker; 
     } 

Je veux faire en sorte x et y sont stockés dans une variable qui correspond au nom d'une place dans un tableau.

Mais je veux essayer de le rendre plus comme ceci:

if (currentMove == '1' && squareOne == '1') 
       squareOne = playerMarker; 

C'est un code que je l'ai vu plus haut. Le code ci-dessous est le mien.

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); 

} 

C'est le code que j'essaie de faire mien.

// Ask current player for a move 
     cout << currentPlayer << "'s move: "; 
     bool validMove; 
     // Loop until a valid move is chosen 
     do 
     { 
      char currentMove; 
      cin >> currentMove; 
      validMove = true; 

      // Check for a valid move 
      if (currentMove == '1' && squareOne == '1') 
       squareOne = playerMarker; 
      else if (currentMove == '2' && squareTwo == '2') 
       squareTwo = playerMarker; 
      else if (currentMove == '3' && squareThree == '3') 
       squareThree = playerMarker; 
      else if (currentMove == '4' && squareFour == '4') 
       squareFour = playerMarker; 
      else if (currentMove == '5' && squareFive == '5') 
       squareFive = playerMarker; 
      else if (currentMove == '6' && squareSix == '6') 
       squareSix = playerMarker; 
      else if (currentMove == '7' && squareSeven == '7') 
       squareSeven = playerMarker; 
      else if (currentMove == '8' && squareEight == '8') 
       squareEight = playerMarker; 
      else if (currentMove == '9' && squareNine == '9') 
       squareNine = playerMarker; 
      else 
      { 
       cout << "Invalid Move. Try again: "; 
       validMove = false; 
      } 
     } while (!validMove); 
+0

Je pourrais jurer avoir vu ce code sur 2 autres questions déjà. – karlphillip

+1

Pourquoi diable ne ferais-tu pas simplement 'board [x-1] [y-1] = playerMarker;' à la place de ce monstrueux enchaîné if-else? Il doit y avoir quelque chose que je ne comprends pas sur le problème. – zwol

+0

Quelle est la question posée ici? –

Répondre

0

Vous pouvez faire

char& squareOne = board[0][0]; 
char& squareTwo = board[0][1]; 
char& squareThree = board[0][2]; 
char& squareFour = board[1][0]; 
... 

L'esperluette (&) signifie que squareFour est une référence à bord [1] [0] (ils partagent la même mémoire sous-jacente, le changement si l'on est en train de changer à la fois).

Notez qu'au lieu de 9 « si ce, vous pouvez calculer la ligne/colonne et définir board[row][column] = playerMarker (ligne & colonne peut être inversée pour vous)

1

ok ceci est juste une supposition à ce que vous voulez, mais ici il va:

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; 

    int xx = x-'1'; 
    int yy = y-'1'; 

    if (xx < 0 || xx > 2 || yy < 0 || yy > 2) 
    { 
      cout << "Invalid Move (outside board). Try again: "; 
      validMove = false; 
    } else if (board[xx][yy] == 0) { 
      board[xx][yy] = playerMarker; 
    } else { 
      cout << "Invalid Move (position already taken). Try again: "; 
      validMove = false; 
    } 

etc etc

Cela suppose la carte est une matrice de 3x3, contenant 0 lorsque la position ne sont pas prises par un joueur, prend le rang 1/2/3 et col 1/2/3 en entrée.

J'espère que cela aide ...

+0

S'il vous plaît utilisez le code en haut dans le premier que j'ai montré changer pour correspondre à la vôtre. J'essaye d'utiliser votre code mais je continue à recevoir les messages d'erreur quand j'essaye de le déboguer. – Renge

+2

@Renge: pourriez-vous accepter certaines des 9 réponses que les gens ont données à vos questions? En outre, si vous voulez quelqu'un pour aider, s'il vous plaît 1) mettre à jour votre question à la nouvelle situation, 2) montrer ce qui ne va pas (avertissements/erreurs) et 3) être * très * clair pour dire ce que vous voulez réellement. "Je reçois des messages d'erreur" est trop vague! – mvds

Questions connexes