示例#1
0
//Function judge the game
JudgeMsg MainGame::Judge()
{
	if(arbiter)
	{
		if(gamehistory.vhistory[currentmove].end)
		{
			if(GameResult() != nonemsg)
			{
				return GameResult();	
			}
		}
	}
	return nonemsg;
}
示例#2
0
GameResult RunAIGame::play(Depth depth, BoardWidth size, RulesType rules, bool contenderFirst)
{
	for (int i=0; i<=1; i++)
	{
		PenteGame *p = _players[i];
		p->restartGame();
		p->setColour(i+1);
		p->setNormalDepth(depth);
		p->setBoardSize(size);
		p->setRules(rules);
	}

	int toMove = P1;

	AlphaBeta ab_games[2] = {
		AlphaBeta(*_players[0]),
		AlphaBeta(*_players[1])
	};

	GameResult res = GameResult();
	res._depth = std::to_string((int)depth);
	res._size = std::to_string((int)size);
	res._rules = rules;
	res._contenderP = (contenderFirst ? "P1" : "P2");

	Colour winner = EMPTY;

	while (winner == EMPTY)
	{
		Timer tmr;
		Loc bestMove = ab_games[toMove-1].getBestMove();
		if (!_silent) {
			std::cout << bestMove << std::endl;
		}
		res._times[toMove-1] += tmr.elapsed();
		assert(_players[0]->isLegalMove(bestMove));

		_players[0]->makeMove(bestMove, toMove);
		_players[1]->makeMove(bestMove, toMove);

		toMove = otherPlayer(toMove);
		winner = _players[1]->getWonBy();
		if (!_silent) {
			// TODO: Use another flag for games
			_players[0]->print();

#if 0
			const PriorityLevel &p1Threes
				= _players[0]->_posStats.getPriorityLevel(P1, Line3);
			const PriorityLevel &p2Threes
				= _players[0]->_posStats.getPriorityLevel(P2, Line3);
			const PriorityLevel &p1Fours
				= _players[0]->_posStats.getPriorityLevel(P1, Line4);
			const PriorityLevel &p2Fours
				= _players[0]->_posStats.getPriorityLevel(P2, Line4);

			cout << "P1 3s: " << p1Threes.getNumCands()
				 << "; P2 3s: " << p2Threes.getNumCands()
				 << "; P1 4s: " << p1Fours.getNumCands()
				 << "; P2 4s: " << p2Fours.getNumCands() << endl;
#endif
		}
	}
	res._winnerWasContender = ((winner==P2) xor contenderFirst);

	return res;
}
示例#3
0
GameResult RubberGame::perform()
{
	deal.perform();
	//deal.getResult();
	return GameResult();
}