/** * @param Game $game * @return Pgn */ private function buildPgnForSaver(Game $game) : Pgn { $headers = ['Event' => 'Game #' . $game->getId(), 'Site' => $this->container->getParameter('app_core_site_host'), 'White' => $game->getUserWhite(), 'Black' => $game->getUserBlack(), 'Result' => $game->getResultWhite() == 0.5 ? '1/2-1/2' : $game->getResultWhite() . '-' . $game->getResultBlack(), 'Date' => $game->getTimeLastMove()->format('Y.m.d')]; if ($game->getTournamentGame()) { $headers['Event'] = $game->getTournamentGame()->getTournament()->getName(); $headers['Round'] = $game->getTournamentGame()->getRound(); } return (new Pgn())->setPgnString($game->getPgn())->setHeaders($headers); }
/** * @param GameFixResultInterface $request * @param Game $game */ private function fixResultIfTimeOver(GameFixResultInterface $request, Game $game) { $gameService = $this->container->get("core.service.chess.game"); $gameService->setPgn($game->getPgn()); if ($request->getTimeWhite() !== null && $game->getTimeWhite() <= 100) { switch ($gameService->isInsufficientMaterialBlack()) { case false: $game->setResultWhite(0)->setResultBlack(1); $this->changeGameStatus($game, GameStatus::END); break; case true: $game->setResultWhite(0.5)->setResultBlack(0.5); $this->changeGameStatus($game, GameStatus::END); break; } } elseif ($request->getTimeBlack() !== null && $game->getTimeBlack() <= 100) { switch ($gameService->isInsufficientMaterialWhite()) { case false: $game->setResultWhite(1)->setResultBlack(0); $this->changeGameStatus($game, GameStatus::END); break; case true: $game->setResultWhite(0.5)->setResultBlack(0.5); $this->changeGameStatus($game, GameStatus::END); break; } } }
/** * @param Game $game * @return bool */ public function canAbort(Game $game) : bool { $this->chessGameService->setPgn($game->getPgn()); return count($this->chessGameService->getMoveList()) < 3; }