Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}