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