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
Post a Comment