void Play() { //Use a quit flag to start a game loop bool quit = false; SDL_Event event; Uint32 lastEvent = 0; while(!quit) { //While there are events to pull... while(SDL_PollEvent(&event) != 0) { //Handle each one //SDL_QUIT is something like hitting the Red X on the top right of screen. Also added support for ESC quit if(event.type == SDL_QUIT) { quit = true; } if(event.key.keysym.sym == SDLK_ESCAPE) { quit = true; //Menu(); //continue; } for(int i = 0; i != TILE_TOTAL; ++i) { tTiles[i].HandleEvent(&event, lastEvent); } //std::cout << lastEvent <<std::endl; } if(IWin('X')) { std::cout << "\n\nX Wins" << std::endl; ResetGame(); } else if(IWin('O')) { std::cout << "\n\nO Wins" << std::endl; ResetGame(); } //If its not my turn, let the computer go if(isMyTurn == false) { ComputersTurn(); } //Clear screen with white SDL_SetRenderDrawColor(theRenderer, 0xFF, 0xFF, 0xFF, 0xFF); SDL_RenderClear(theRenderer); DrawBoard(); SDL_RenderPresent(theRenderer); } //Quit is true at this point so we return return; }
Game::status MCTSPlayer::runTrial( MCTSNodePtr node, bool myTurn ) { Game::status returnStatus; node->visit(); if (!node->isLeaf()) { //selection returnStatus=runTrial(node->bestSelection(myTurn), !myTurn); } else { //expansion vector<StringGameStatePtr>& a = g->getPossibleMoves(node->getState()); node->expand(a); if (!node->isLeaf()) { node=node->getRandomChild(); node->visit(); } //simulation returnStatus=simulateFrom(node->getState()); } //back prorogation if (IWin(returnStatus)) { node->setScore(node->getScore()+1); } if (ILose(returnStatus)) { node->setScore(node->getScore()-1); } return returnStatus; }