示例#1
0
 /**
  * {ships: [{size: 4, x: 3, y:5, direction: 'horizontal' / 'vertical'}, {...}]}}
  *
  * return {valid: true} ou { valid: false, reason: 'Illegal : two ships intersecting'}
  * @ApiDoc(
  *      description="Place ses navires.",
  *      section="3 - Placement des navires",
  *      authentication=true,
  *      statusCodes={
  *          200: "Les navires ont été placés. Il faut maintenant attendre que l'autre joueur ait fait de même.",
  *          400: "Les navires ne peuvent pas être placés tel que demandé. Les navires se croisent ou sortent du tableau.",
  *          403: "Mauvais secret."
  *      }
  * )
  * @ParamConverter("game", class="AppBundle:Game", options={"id" = "game_id"})
  * @RequestParam(name="secret", nullable=false, description="Secret du joueur")
  * @RequestParam(name="ships", array=true, nullable=false, description="Tableau de {x, y, size, direction <horizontal|vertical>}")
  * @Post("/api/v1/games/{game_id}/ships", name="place_ships_api")
  * @Post("/games/{game_id}/ships", name="place_ships")
  */
 public function placeShipsAction(Game $game, ParamFetcher $paramFetcher)
 {
     $player = $game->getPlayerBySecret($paramFetcher->get('secret'));
     // @TODO Exception in Game entity if bad secret?
     if ($player === null) {
         throw new HttpException(400, 'Bad secret.');
     }
     if (!$game->isFull()) {
         // @todo mettre ces vérifs dans l'entité
         throw new HttpException(400, 'No one has joined yet.');
     }
     if ($game->playerHasPlacedShips($player)) {
         throw new HttpException(400, 'You\'ve already placed your ships.');
     }
     if (!($res = $game->setPlayerShips($player, $paramFetcher->get('ships'))) instanceof Game) {
         // can throw exception @TODO
         var_dump($res);
     }
     $em = $this->getDoctrine()->getEntityManager();
     $em->persist($game);
     $em->flush();
     return $this->view(array('info' => 'Ships placed!'), 200)->setTemplate('AppBundle:Api:verify_placed_ships.html.twig')->setTemplateData(array('secret' => $paramFetcher->get('secret'), 'game' => $game, 'opponent_player_id' => $player == 1 ? 2 : 1));
 }