C++ problem, could you please with this probelm “Game” through only using bitwise operators & the following:
1-Control and repetition structures for input validation.
2-Bitwise operators to handle the underlying bits in a variable.
3-Apply formatting rules to console output.
4-Replicate the gameplay of the game.
Expert Answer
using namespace std;
class Tic
{
public:
Tic();
int plmov(int i);
void nxtpl();
void winchk();
void Drawbd();
private:
int bd[3][3];
int turn; // pl1 == 1, pl2 == 2
int gmover;
void plgm();
};
Tic::Tic()
{
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
bd[i][j] = 0;// 0 means empty
turn = 1; // pl1
gmover = 0;
Drawbd();
plgm();
}
int Tic::plmov(int i)
{
int x = (i – 1)/3;
int y = ((i + 2) % 3);
int returnVal = bd[x][y];
if (returnVal == 0)
{
bd[x][y] = turn;
winchk();
if (!gmover)
nxtpl();
}
else
cout << “Invalid move, try again.n”;
Drawbd();
return returnVal;
}
void Tic::nxtpl()
{
if (turn == 1)
turn = 2;
else
turn = 1;
}
void Tic::winchk()
{
if ((bd[0][0] == turn) && (bd[1][0] == turn) && (bd[2][0] == turn))
gmover = turn;
else
if ((bd[0][1] == turn) && (bd[1][1] == turn) && (bd[2][1] == turn))
gmover = turn;
else
if ((bd[0][2] == turn) && (bd[1][2] == turn) && (bd[2][2] == turn))
gmover = turn;
else
if ((bd[0][0] == turn) && (bd[0][1] == turn) && (bd[0][2] == turn))
gmover = turn;
else
if ((bd[1][0] == turn) && (bd[1][1] == turn) && (bd[1][2] == turn))
gmover = turn;
else
if ((bd[2][0] == turn) && (bd[2][1] == turn) && (bd[2][2] == turn))
gmover = turn;
else
if ((bd[0][0] == turn) && (bd[1][1] == turn) && (bd[2][2] == turn))
gmover = turn;
else
if ((bd[0][2] == turn) && (bd[1][1] == turn) && (bd[2][0] == turn))
gmover = turn;
}
void Tic::plgm()
{
int i;
while (gmover!=turn)
{
//Drawbd();
cout << “Player[” << turn << “] Please enter move: “;
cin >> i;
plmov(i);
}
cout << “Player[” << turn << “] Wins!” << endl;
}
void Tic::Drawbd()
{
int temp[9];
int k = 0;
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
{
if (bd[i][j] == 0)
temp[k] = k+49;
else
{
if (bd[i][j] == 1)
temp[k] = 88;
else
temp[k] = 79;
}
k++;
}
cout << “+—+—+—+n”;
cout <<“| ” << (char)temp[0] << ” | ” << (char)temp[1] << ” | ” << (char)temp[2] << ” | n”;
cout << “+—+—+—+n”;
cout <<“| ” << (char)temp[3] << ” | ” << (char)temp[4] << ” | ” << (char)temp[5] << ” | n”;
cout << “+—+—+—+n”;
cout <<“| ” << (char)temp[6] << ” | ” << (char)temp[7] << ” | ” << (char)temp[8] << ” | n”;
cout << “+—+—+—+n”;
}
int main()
{
Tic Game;
return 0;
}