X-Git-Url: https://troll.desast.re/troll.git/blobdiff_plain/e0da785e68b21f4906f4f0bc849bb7bbab1abeb8..1283a2efac37c95016224dd832ebac81ce8a99d7:/src/main/java/com/codingame/game/Referee.java diff --git a/src/main/java/com/codingame/game/Referee.java b/src/main/java/com/codingame/game/Referee.java index b15b4b0..3aef88d 100644 --- a/src/main/java/com/codingame/game/Referee.java +++ b/src/main/java/com/codingame/game/Referee.java @@ -24,6 +24,8 @@ public class Referee extends AbstractReferee { @Inject private View view; @Inject private Model model; + boolean disqual = false; + @Override public void init() { model.init(gameManager.getSeed()); @@ -31,7 +33,8 @@ public class Referee extends AbstractReferee { gameManager.getPlayer(1).model = model.p1; for (Player p: gameManager.getPlayers()) { - p.gameInit(model.roadLength, model.initialStones); + p.gameInit(model.roadLength, model.initialStones, + gameManager.getSeed()); } view.init(model); @@ -52,6 +55,11 @@ public class Referee extends AbstractReferee { view.startTurn(); + // Did I mention I hate Java? It didn't *have* to be this ugly! + if (disqual) { endGame(); return; } + if (model.exhausted()) { finishStones(); return ;} + if (model.haveWinner()) { endGame(); return; } + for (Player player : gameManager.getActivePlayers()) { player.sendGameTurn(); } @@ -62,7 +70,6 @@ public class Referee extends AbstractReferee { * is ill-formed it could help them debug. Or shame them, at * least. */ - boolean disqual = false; for (Player player : gameManager.getActivePlayers()) { player.receiveGameTurn(); switch (player.type) { @@ -115,8 +122,6 @@ public class Referee extends AbstractReferee { * exhaustion). */ int delta = 0; - boolean victory = false; - boolean exhausted = false; for (Player player : gameManager.getActivePlayers()) { player.view.throwStones(player.stoneThrow); delta += player.model.getMultiplier() * player.stoneThrow; @@ -149,35 +154,49 @@ public class Referee extends AbstractReferee { else if (cheat1) delta = 1; if (delta > 0) { - model.trollPosition++; + model.moveTroll(+1); view.moveTroll(View.Dir.RIGHT); } else if (delta < 0) { - model.trollPosition--; + model.moveTroll(-1); view.moveTroll(View.Dir.LEFT); } else { view.moveTroll(View.Dir.STILL); // XXX animate } + } + // XXX very similar to main turn pendant + private void finishStones() { + boolean noStones = true; + int delta = 0; for (Player player : gameManager.getActivePlayers()) { - player.model.adjustScore(model.trollPosition); - } - - if (model.haveWinner()) { - int loser = model.getLoser(); - gameManager.getPlayer(loser).view.destroy(); - victory = true; + if (model.haveWinner() && player.getIndex() == model.getLoser()) + continue; + player.stoneThrow = player.model.getStones(); + player.model.setStones(0); + delta += player.stoneThrow * player.model.getMultiplier(); + player.view.throwStones(player.stoneThrow); + if (player.stoneThrow != 0) { + noStones = false; + player.view.animateStones(player.stoneThrow); + player.view.updateStoneCounter(); + } } - else if (model.exhausted()) exhausted = true; - - if (disqual || victory || exhausted) endGame(); + if (noStones) { endGame(); return; } + model.moveTroll(delta); + view.moveTroll(); } private void endGame() { gameManager.endGame(); + if (model.haveWinner()) { + int loser = model.getLoser(); + gameManager.getPlayer(loser).view.defeat(); + } + Player p0 = gameManager.getPlayer(0); Player p1 = gameManager.getPlayer(1);