//Function judge the game JudgeMsg MainGame::Judge() { if(arbiter) { if(gamehistory.vhistory[currentmove].end) { if(GameResult() != nonemsg) { return GameResult(); } } } return nonemsg; }
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; }
GameResult RubberGame::perform() { deal.perform(); //deal.getResult(); return GameResult(); }