c++ - How to stop char variables from being overwritten? -


im making 2 player tic tac toe game in c++ , im fixing couple problems had it. program complete except 1 tiny detail, players can overwrite other players moves. if have player 1 ("x") , player 2 ("o"), player 1 can place "x" on "o" eliminating player 2s move! i'm wondering if there way stop happening, used 2d array "board":

game.cpp

#include "game.h" #include <iostream> #include <cstdlib> using namespace std;   game::game() {     char b[3][3]= { {'.','.','.'},{'.','.','.'},{'.','.','.'}};     for(x=0;x<3;x++)     {         for(y=0;y<3;y++)         {             board[x][y]=b[x][y];         }  } counter = 1; printboard2(); }    void game::printboard2() {     for(x=0; x < 3; x++)     {         for(y =0; y<3; y++)         {             cout << board[x][y] << " " ;          }         cout << endl;     }  cout << endl; showmoves();   }  void game::printboard() {     for(x=0; x < 3; x++)     {         for(y =0; y<3; y++)         {             cout << board[x][y] << " " ;          }         cout << endl;     }  cout << endl; cout << "move # " << counter << endl; checkwinner(board); counter ++; checknowinner(counter); }  void game::showmoves() {      cout << endl;     cout << "player 1, enter want place 'x' " << endl;     cout << endl;     cout << "top right (1)" << endl;     cout << "top left (2)" << endl;     cout << "center (3)" << endl;     cout << "center top (4) " << endl;     cout << "center bottom (5)" << endl;     cout << "center right (6) " << endl;     cout << "center left (7)" << endl;     cout << "bottom right (8)" << endl;     cout << "bottom left (9)" << endl;     p1m();   }  void game::p1m() {     cin >> usermove;     updateboardx(usermove);  }  void game::p2m() {     cin >> usermove;     updateboardo(usermove); }  void game::updateboardx(int m) {     switch(usermove)     { case 1:     board[0][2] = 'x';     printboard();     break; case 2:     board[0][0] = 'x';     printboard();     break; case 3:     board[1][1] = 'x';     printboard();     break; case 4:     board[0][1] = 'x';     printboard();     break; case 5:     board[2][1] = 'x';     printboard();     break; case 6:     board[1][2] = 'x';     printboard();     break; case 7:     board[1][0] = 'x';     printboard();     break; case 8:     board[2][2] = 'x';     printboard();     break; case 9:     board[2][0] = 'x';     printboard();     break;     }  p2turn();  } void game::updateboardo(int m2) {      switch(usermove)     { case 1:     board[0][2] = 'o';     printboard();     break; case 2:     board[0][0] = 'o';     printboard();     break; case 3:     board[1][1] = 'o';     printboard();     break; case 4:     board[0][1] = 'o';     printboard();     break; case 5:     board[2][1] = 'o';     printboard();     break; case 6:     board[1][2] = 'o';     printboard();     break; case 7:     board[1][0] = 'o';     printboard();     break; case 8:     board[2][2] = 'o';     printboard();     break; case 9:     board[2][0] = 'o';     printboard();     break;     }  showmoves();  }     void game::p2turn() {     cout << "alright player 2, turn" << endl;     cout << endl;     cout << "top right (1)" << endl;     cout << "top left (2)" << endl;     cout << "center (3)" << endl;     cout << "center top (4) " << endl;     cout << "center bottom (5)" << endl;     cout << "center right (6) " << endl;     cout << "center left (7)" << endl;     cout << "bottom right (8)" << endl;     cout << "bottom left (9)" << endl;     p2m(); }   void game::checkwinner(char b[][3]) {       if(b[0][0]== 'x' , b[0][1]== 'x' , b[0][2]== 'x')     {            cout << "p1 wins!" << endl;             endgame();     }else if(b[1][0]== 'x' , b[1][1]== 'x' , b[1][2]== 'x')     {             cout << "p1 wins!" << endl;             endgame();     }else if(b[2][0]== 'x' , b[2][1]== 'x' , b[2][2]== 'x')     {             cout << "p1 wins!" << endl;             endgame();     }else if(b[0][0]== 'x' , b[1][0]== 'x' , b[2][0]== 'x')     {             cout << "p1 wins!" << endl;             endgame();     }else if(b[0][1]== 'x' , b[1][1]== 'x' , b[2][1]== 'x')     {             cout << "p1 wins!" << endl;             endgame();     }else if(b[0][2]== 'x' , b[1][2]== 'x' , b[2][2]== 'x')     {             cout << "p1 wins!" << endl;             endgame();     }else if(b[0][0]== 'x' , b[1][1]== 'x' , b[2][2]== 'x')     {             cout << "p1 wins!" << endl;             endgame();     }else if(b[0][2]== 'x' , b[1][1]== 'x' , b[2][0]== 'x')     {             cout << "p1 wins!" << endl;             endgame();     } else if(b[0][0]== 'o' , b[0][1]== 'o' , b[0][2]== 'o')     {            cout << "p2 wins!" << endl;             endgame();     }else if(b[1][0]== 'o' , b[1][1]== 'o' , b[1][2]== 'o')     {             cout << "p2 wins!" << endl;             endgame();     }else if(b[2][0]== 'o' , b[2][1]== 'o' , b[2][2]== 'o')     {             cout << "p2 wins!" << endl;             endgame();     }else if(b[0][0]== 'o' , b[1][0]== 'o' , b[2][0]== 'o')     {             cout << "p2 wins!" << endl;             endgame();     }else if(b[0][1]== 'o' , b[1][1]== 'o' , b[2][1]== 'o')     {             cout << "p2 wins!" << endl;             endgame();     }else if(b[0][2]== 'o' , b[1][2]== 'o' , b[2][2]== 'o')     {             cout << "p2 wins!" << endl;             endgame();      }else if(b[0][0]== 'o' , b[1][1]== 'o' , b[2][2]== 'o')     {             cout << "p2 wins!" << endl;             endgame();     }else if(b[0][2]== 'o' , b[1][1]== 'o' , b[2][0]== 'o')     {             cout << "p1 wins!" << endl;             endgame();     } } void game::checknowinner(int c) {     if(counter == 9)     {         cout << "no winner!" << endl;         endgame();     } }    int game::endgame() {   char endg;     cout << "play again? (y/n)" << endl;     cin >> endg;     if(endg=='n')     {         exit(0);     }else if(endg=='y')     {         game();      }  return 0; } 

in updateboardx , updateboardo functions, set value of element of board. like:

board[0][0] = 'x'; 

i suggest before check value if 'x' or 'o' see if element occupied previous move. example:

if(board[0][2]=='x' || board[0][2]=='o')     //alert user or 

Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -

php - $params->set Array between square bracket -