@Override
public Boolean shot(Long gameId, String userId, Shot shot) throws Exception {
logger.info("shot " + userId + " " + shot);
Game game = gameDao.find(gameId);
logger.debug("game " + game);
Player player = foundPlayer(game.getPlayers(),userId);
logger.debug("found " + player);
Boolean isHit = false;
switch (game.getStatus()) {
case Round1:
logger.debug("Round 1 ");
if (game.getPlayers().get(1) != null &&
game.getPlayers().get(1).equals(player)) {
isHit = shot(game.getPlayers().get(1),shot);
logger.debug("isHit "+ isHit);
if (isAllShipDestroyed(game.getPlayers().get(1)) ) {
game.setStatus(GameStatus.Wind1);
logger.debug("All Ship Destroyed ");
} else
game.setStatus(GameStatus.Round2);
} else {
throw new Exception("Wrong state");
}
break;
case Round2:
logger.debug("Round 2 ");
if (game.getPlayers().get(0) != null &&
game.getPlayers().get(0).equals(player)) {
isHit = shot(game.getPlayers().get(0),shot);
logger.debug("isHit "+ isHit);
if (isAllShipDestroyed(game.getPlayers().get(0)) ) {
game.setStatus(GameStatus.Wind2);
logger.debug("All Ship Destroyed ");
} else
game.setStatus(GameStatus.Round1);
} else
throw new Exception("Wrong state");
break;
case Wind1:
logger.debug("Wind 1 ");
if (game.getPlayers().get(0) != null &&
game.getPlayers().get(0).equals(player)) {
isHit = shot(game.getPlayers().get(0),shot);
logger.debug("isHit "+ isHit);
if (isAllShipDestroyed(game.getPlayers().get(0)) ) {
game.setStatus(GameStatus.Draw);
logger.debug("All Ship Destroyed ");
} else {
game.setStatus(GameStatus.Wind1);
}
} else
throw new Exception("Wrong state");
break;