예제 #1
0
 /**
  * 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;
     }
 }
예제 #2
0
 /**
  * @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;
 }