コード例 #1
0
ファイル: ApiController.php プロジェクト: axelchalon/navale
 /**
  * {coord: {y: 12, x: 13}}
  *
  * return {valid: false, reason: 'Already fired there. Result was a miss.'} ou {valid: true, move_id: X, result: 'miss/hit/sank', ??goban: {}?? }
  * @ApiDoc(
  *      description="Joue un coup.",
  *      section="4 - Jeu",
  *      authentication=true,
  *      statusCodes={
  *          200: "Le coup a été joué. Renvoie le résultat du coup (manqué/touché/coulé).",
  *          400: "Le coup n'est pas valide, ou bien ce n'est pas à votre tour de jouer."
  *      }
  * )
  *
  * @RequestParam(name="secret", nullable=false, description="Secret du joueur")
  * @RequestParam(name="x", nullable=false, description="Position X du tir")
  * @RequestParam(name="y", nullable=false, description="Position Y du tir")
  * @ParamConverter("game", class="AppBundle:Game", options={"id" = "game_id"})
  * @Post("/api/v1/games/{game_id}/moves", name="shoot_api")
  * @Post("/games/{game_id}/moves", name="shoot")
  */
 public function shootAction(Game $game, ParamFetcher $paramFetcher)
 {
     $player = $game->getPlayerBySecret($paramFetcher->get('secret'));
     if ($player === null) {
         throw new HttpException(400, 'Bad secret.');
     }
     if (!$game->isFull()) {
         throw new HttpException(400, 'The game isn\'t full yet.');
     }
     if ($game->isGameOver()) {
         throw new HttpException(400, 'Game over.');
     }
     if ($game->getNextPlayer() === null || (int) $game->getNextPlayer() !== (int) $player) {
         throw new HttpException(400, 'It\'s not your turn to play.');
     }
     $result = $game->playerShoots($player, ['x' => $paramFetcher->get('x'), 'y' => $paramFetcher->get('y')]);
     // can throw exception @TODO
     if (is_int($result)) {
         exit('Erreur : ' . $result);
     }
     $em = $this->getDoctrine()->getEntityManager();
     $em->persist($game);
     $em->flush();
     return $this->view(array('result' => $result), 200)->setTemplate('AppBundle:Api:shoot_result.html.twig')->setTemplateData(array('move' => ['x' => $paramFetcher->get('x'), 'y' => $paramFetcher->get('y'), 'result' => $result], 'move_id' => $game->getNextMoveId(), 'game' => $game, 'secret' => $paramFetcher->get('secret')));
 }