I'm making a tic tac toe game but it's not working properly. Sometimes it work properly for a while but then becomes unresponsive.
Code:
#include <iostream>
#include "pause.h"
#include "gotoxy.h"
#include "mouse.h"
#include "random.h"
const char cross = 197,
vline = 179,
hline = 196;
#define COMPUTER 0
#define PLAYER 1
namespace game{
int turn = random()%2;
char board[3][3] = {{' ',' ',' '},{' ',' ',' '},{' ',' ',' '}};
int boardpos[3] = {10, 12, 14};
int x, y, click;
void draw();
void p1move();
void compmove();
int checkwin();
}
using namespace game;
int main(){
int Continue = true;
while (Continue){
Continue = play();
}
}
void game::draw(){
gotoxy(10,10);cout<<board[0][0]<<vline<<board[1][0]<<vline<<board[2][0];
gotoxy(10,11);cout<< hline <<cross<< hline <<cross<< hline ;
gotoxy(10,12);cout<<board[0][1]<<vline<<board[1][1]<<vline<<board[2][1];
gotoxy(10,13);cout<< hline <<cross<< hline <<cross<< hline ;
gotoxy(10,14);cout<<board[0][2]<<vline<<board[1][2]<<vline<<board[2][2];
}
void game::p1move(){
mouse(x, y, click);
if (x == boardpos[0] && y == boardpos[0] && click && board[0][0] == ' '){
board[0][0] = 'X'; turn = COMPUTER; }
if (x == boardpos[1] && y == boardpos[0] && click && board[0][0] == ' '){
board[1][0] = 'X'; turn = COMPUTER; }
if (x == boardpos[2] && y == boardpos[0] && click && board[0][0] == ' '){
board[2][0] = 'X'; turn = COMPUTER; }
if (x == boardpos[0] && y == boardpos[1] && click && board[0][0] == ' '){
board[0][1] = 'X'; turn = COMPUTER; }
if (x == boardpos[1] && y == boardpos[1] && click && board[0][0] == ' '){
board[1][1] = 'X'; turn = COMPUTER; }
if (x == boardpos[2] && y == boardpos[1] && click && board[0][0] == ' '){
board[2][1] = 'X'; turn = COMPUTER; }
if (x == boardpos[0] && y == boardpos[2] && click && board[0][0] == ' '){
board[0][2] = 'X'; turn = COMPUTER; }
if (x == boardpos[1] && y == boardpos[2] && click && board[0][0] == ' '){
board[1][2] = 'X'; turn = COMPUTER; }
if (x == boardpos[2] && y == boardpos[2] && click && board[0][0] == ' '){
board[2][2] = 'X'; turn = COMPUTER; }
}
void game::compmove(){
if (board[0][0] == 'O' && board[1][0] == 'O' && board[2][0] == ' ')//horizontally
board[2][0] = 'O';
else if (board[0][0] == 'O' && board[2][0] == 'O' && board[1][0] == ' ')
board[1][0] = 'O';
else if (board[1][0] == 'O' && board[2][0] == 'O' && board[0][0] == ' ')
board[0][0] = 'O';
else if (board[0][1] == 'O' && board[1][1] == 'O' && board[2][1] == ' ')
board[2][1] = 'O';
else if (board[0][1] == 'O' && board[2][1] == 'O' && board[1][1] == ' ')
board[1][1] = 'O';
else if (board[1][1] == 'O' && board[2][1] == 'O' && board[0][1] == ' ')
board[0][1] = 'O';
else if (board[0][2] == 'O' && board[1][2] == 'O' && board[2][2] == ' ')
board[2][2] = 'O';
else if (board[0][2] == 'O' && board[2][2] == 'O' && board[1][2] == ' ')
board[1][2] = 'O';
else if (board[1][2] == 'O' && board[2][2] == 'O' && board[0][2] == ' ')
board[0][2] = 'O';
else if (board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == ' ')//diagonally
board[2][2] = 'O';
else if (board[0][0] == 'O' && board[2][2] == 'O' && board[1][1] == ' ')
board[1][1] = 'O';
else if (board[1][1] == 'O' && board[2][2] == 'O' && board[0][0] == ' ')
board[0][0] = 'O';
else if (board[2][0] == 'O' && board[1][1] == 'O' && board[0][2] == ' ')
board[0][2] = 'O';
else if (board[2][0] == 'O' && board[0][2] == 'O' && board[1][1] == ' ')
board[1][1] = 'O';
else if (board[1][1] == 'O' && board[0][2] == 'O' && board[2][0] == ' ')
board[2][0] = 'O';
else if (board[0][0] == 'O' && board[0][1] == 'O' && board[0][2] == ' ')//vertically
board[0][2] = 'O';
else if (board[0][0] == 'O' && board[0][2] == 'O' && board[0][1] == ' ')
board[0][1] = 'O';
else if (board[0][1] == 'O' && board[0][2] == 'O' && board[0][0] == ' ')
board[0][0] = 'O';
else if (board[1][0] == 'O' && board[1][1] == 'O' && board[1][2] == ' ')
board[1][2] = 'O';
else if (board[1][0] == 'O' && board[1][2] == 'O' && board[1][1] == ' ')
board[1][1] = 'O';
else if (board[1][1] == 'O' && board[1][2] == 'O' && board[1][0] == ' ')
board[1][0] = 'O';
else if (board[2][0] == 'O' && board[2][1] == 'O' && board[2][2] == ' ')
board[2][2] = 'O';
else if (board[2][0] == 'O' && board[2][2] == 'O' && board[2][1] == ' ')
board[2][1] = 'O';
else if (board[2][1] == 'O' && board[2][2] == 'O' && board[2][0] == ' ')
board[2][0] = 'O';
else if (board[1][1] == ' ')//searches empty spaces
board[1][1] = 'O';
else if (board[1][0] == ' ')
board[1][0] = 'O';
else if (board[2][0] == ' ')
board[2][0] = 'O';
else if (board[2][1] == ' ')
board[2][1] = 'O';
else if (board[2][2] == ' ')
board[2][2] = 'O';
else if (board[1][2] == ' ')
board[1][2] = 'O';
else if (board[0][2] == ' ')
board[0][1] = 'O';
else if (board[0][1] == ' ')
board[0][1] = 'O';
else if (board[0][0] == ' ')
board[0][0] = 'O';
}
int game::checkwin(){
if ((board[0][0] == 'O' && board[1][0] == 'O' && board[2][0] == 'O')||
(board[0][1] == 'O' && board[1][1] == 'O' && board[2][1] == 'O')||
(board[0][2] == 'O' && board[1][2] == 'O' && board[2][2] == 'O')||
(board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O')||
(board[2][0] == 'O' && board[1][1] == 'O' && board[0][2] == 'O')||
(board[0][0] == 'O' && board[0][1] == 'O' && board[0][2] == 'O')||
(board[1][0] == 'O' && board[1][1] == 'O' && board[1][2] == 'O')||
(board[2][0] == 'O' && board[2][1] == 'O' && board[2][2] == 'O')){
gotoxy(1,1);
cout<<"The computer won";
gotoxy(1,2);
cout<<"Play again? (y/n)";
}
else if ((board[0][0] == 'X' && board[1][0] == 'X' && board[2][0] == 'X')||
(board[0][1] == 'X' && board[1][1] == 'X' && board[2][1] == 'X')||
(board[0][2] == 'X' && board[1][2] == 'X' && board[2][2] == 'X')||
(board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X')||
(board[2][0] == 'X' && board[1][1] == 'X' && board[0][2] == 'X')||
(board[0][0] == 'X' && board[0][1] == 'X' && board[0][2] == 'X')||
(board[1][0] == 'X' && board[1][1] == 'X' && board[1][2] == 'X')||
(board[2][0] == 'X' && board[2][1] == 'X' && board[2][2] == 'X')){
gotoxy(1,1);
cout<<"You won!";
gotoxy(1,2);
cout<<"Play again? (y/n)";
}
}
int play(){
no_cursor();
int play = true;
while (play){
//----------------------------------------------------------------------------------------------------
//---------- draw -------------------------------------------------------------------------------START
//----------------------------------------------------------------------------------------------------
draw();
gotoxy(1,1);
cout<<turn;
pause(1000);
//----------------------------------------------------------------------------------------------------
//---------- p1 move ----------------------------------------------------------------------------START
//----------------------------------------------------------------------------------------------------
while (turn == PLAYER){
p1move();
}
gotoxy(1,1);
cout<<turn;
pause(1000);
draw();
checkwin();
//----------------------------------------------------------------------------------------------------
//---------- comp move --------------------------------------------------------------------------START
//----------------------------------------------------------------------------------------------------
if (turn == COMPUTER){
compmove();
turn = PLAYER;
}
gotoxy(1,1);
cout<<turn;
pause(1000);
//----------------------------------------------------------------------------------------------------
//---------- wins/loss --------------------------------------------------------------------------START
//----------------------------------------------------------------------------------------------------
checkwin();
gotoxy(1,1);
cout<<turn;
pause(1000);
}
}