コード例 #1
0
 /**
  * @param array $data
  * @return mixed
  */
 protected function createEntity($data)
 {
     $tournament = new Tournament();
     $tournament->setName($data['name'])->setCurrentRound((int) @$data["current_round"]);
     if (isset($data['private'])) {
         $tournament->setPrivate($data['private']);
     }
     if (isset($data["status"])) {
         $this->container->get("core.handler.tournament")->changeTournamentStatus($tournament, new TournamentStatus($data["status"]));
     }
     $tournamentPlayersMap = [];
     if (isset($data['players'])) {
         foreach ($data['players'] as $referencePlayer) {
             /** @var User $player */
             $player = $this->getReference($referencePlayer);
             $tournamentPlayer = new TournamentPlayer();
             $countBlack = mt_rand(4, 5);
             $whiteInRow = mt_rand(0, 2);
             $tournamentPlayer->setTournament($tournament)->setPlayer($player)->setWhiteInRow($whiteInRow)->setBlackInRow($whiteInRow ? 0 : mt_rand(0, 2))->setCountBlack($countBlack)->setCountWhite(9 - $countBlack)->setPoints(mt_rand(0, 9))->setCoefficient(mt_rand(0, 2))->setMissedRound(!!mt_rand(0, 1));
             $opponents = $this->getShuffleOpponents($data["players"], $referencePlayer, min(count($data["players"]), 9));
             foreach ($opponents as $opponent) {
                 $tournamentPlayer->addOpponent($opponent);
             }
             $tournament->getPlayers()->add($tournamentPlayer);
             $tournamentPlayersMap[$player->getId()] = $tournamentPlayer;
         }
     }
     if (isset($data["game_params"])) {
         /** @var GameParams $gameParams */
         $gameParams = $this->container->get("jms_serializer")->deserialize(json_encode($data["game_params"]), 'CoreBundle\\Model\\Game\\GameParams', 'json');
         $tournament->setGameParams($gameParams);
     }
     if (isset($data["tournament_params"])) {
         $tournamentParams = TournamentParamsFactory::create($data["tournament_params"]["type"]);
         if (isset($data["tournament_params"]["time_begin"])) {
             $tournamentParams->setTimeBegin($this->container->get("core.service.date")->getDateTime($data["tournament_params"]["time_begin"]));
             if (isset($data["tournament_params"]["games_vs_opponent"])) {
                 $tournamentParams->setGamesVsOpponent($data["tournament_params"]["games_vs_opponent"]);
             }
         }
         $tournament->setTournamentParams($tournamentParams);
     }
     if (isset($data["games"])) {
         foreach ($data["games"] as $dataGame) {
             /** @var Game $game */
             $game = $this->getReference($dataGame["reference"]);
             $this->container->get("core.handler.tournament")->addGameToTournament($tournament, $game, $dataGame["round"], $tournamentPlayersMap[$game->getUserWhite()->getId()], $tournamentPlayersMap[$game->getUserBlack()->getId()]);
         }
     }
     return $tournament;
 }
コード例 #2
0
ファイル: Tournament.php プロジェクト: StasPiv/playzone
 /**
  * @param User $player
  * @return Tournament
  */
 public function addPlayer(User $player) : Tournament
 {
     $tournamentPlayer = new TournamentPlayer();
     $tournamentPlayer->setTournament($this)->setPlayer($player)->setRating($player->getRating());
     $this->players->add($tournamentPlayer);
     return $this;
 }
コード例 #3
0
ファイル: SwissService.php プロジェクト: StasPiv/playzone
 /**
  * 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;
     }
 }
コード例 #4
0
 /**
  * @param TournamentPlayer $player
  * @param TournamentPlayer $opponent
  * @param float $result
  */
 private function updateCoefficients(TournamentPlayer $player, TournamentPlayer $opponent, float $result)
 {
     $player->setCoefficient($player->getCoefficient() + $result * $opponent->getPoints());
 }