/** * Fill property $possibleOpponentsMap * * @param TournamentPlayer $player */ private function buildPossibleOpponentsMap(TournamentPlayer $player) { $this->possibleOpponentsMap[$player->getId()]['player'] = $player; $queryBuilder = $this->container->get("doctrine")->getRepository("CoreBundle:TournamentPlayer")->createQueryBuilder("tp"); $queryBuilder->andWhere("tp.player != :player")->setParameter("player", $player); $queryBuilder->andWhere("tp.tournament = :tournament")->setParameter("tournament", $player->getTournament()); $queryBuilder->addOrderBy("tp.points", "DESC"); /** @var TournamentPlayer[] $possibleOpponents */ $possibleOpponents = $queryBuilder->getQuery()->getResult(); foreach ($possibleOpponents as $opponent) { if ($opponent == $player) { continue; } if (in_array($opponent->getPlayer()->getId(), $player->getOpponents()) || in_array($player->getPlayer()->getId(), $opponent->getOpponents())) { continue; } if (!$this->ignoreColors && $player->getRequiredColor() != GameColor::RANDOM && $opponent->getRequiredColor() == $player->getRequiredColor()) { continue; } $this->possibleOpponentsMap[$player->getId()]['opponents'][$opponent->getId()] = $opponent; } }
/** * @param Tournament $tournament * @param int $round * @param TournamentPlayer $firstPlayer * @param TournamentPlayer $secondPlayer * @return TournamentGame */ public function createTournamentGame(Tournament $tournament, int $round, TournamentPlayer $firstPlayer, TournamentPlayer $secondPlayer) : TournamentGame { if ($firstPlayer->getId() === 0 || $secondPlayer->getId() === 0) { throw new TournamentGameShouldBeSkippedException(); } $game = $this->container->get("core.handler.game")->createEntity(); switch (true) { case $firstPlayer->getRequiredColor() == GameColor::BLACK || $secondPlayer->getRequiredColor() == GameColor::WHITE: $game->setUserWhite($secondPlayer->getPlayer())->setUserBlack($firstPlayer->getPlayer()); $whiteTournamentPlayer = $secondPlayer; $blackTournamentPlayer = $firstPlayer; break; default: $game->setUserWhite($firstPlayer->getPlayer())->setUserBlack($secondPlayer->getPlayer()); $whiteTournamentPlayer = $firstPlayer; $blackTournamentPlayer = $secondPlayer; } $game->setUserToMove($game->getUserWhite()); $game->setTimeWhite($tournament->getGameParams()->getTimeBase())->setTimeBlack($tournament->getGameParams()->getTimeBase())->setRatingWhite($whiteTournamentPlayer->getPlayer()->getRating())->setRatingBlack($blackTournamentPlayer->getPlayer()->getRating()); $game->setGameParams($tournament->getGameParams()); $this->container->get("core.handler.game")->changeGameStatus($game, GameStatus::PLAY); $tournamentGame = new TournamentGame(); $tournamentGame->setGame($game)->setTournament($tournament)->setRound($round)->setPlayerWhite($whiteTournamentPlayer)->setPlayerBlack($blackTournamentPlayer); return $tournamentGame; }