X-Git-Url: https://troll.desast.re/troll.git/blobdiff_plain/076ea5bbdda8751cd178b657157d3a08458b7c7b..00ef746e66b9aa761ca570cffea2a695f007fd9e:/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 6866b9b..5b6ec3a 100644 --- a/src/main/java/com/codingame/game/Referee.java +++ b/src/main/java/com/codingame/game/Referee.java @@ -21,6 +21,8 @@ public class Referee extends AbstractReferee { @Inject private MultiplayerGameManager gameManager; @Inject private GraphicEntityModule graphicEntityModule; + Random random; + int roadLength; int initialStones; int trollPosition; @@ -30,7 +32,8 @@ public class Referee extends AbstractReferee { @Override public void init() { - switch (new Random(gameManager.getSeed()).nextInt(4)) { + random = new Random(gameManager.getSeed()); + switch (random.nextInt(4)) { case 0: roadLength = 7; initialStones = 15; @@ -104,15 +107,7 @@ public class Referee extends AbstractReferee { .setLineWidth(0) .setFillColor(0xffffff); - Text text = graphicEntityModule.createText(player.getNicknameToken()) - .setX(x) - .setY(y + 120) - .setZIndex(20) - .setFontSize(40) - .setFillColor(0x7f3f00) - .setAnchor(0.5); - - Sprite avatar = graphicEntityModule.createSprite() + Sprite avatarSprite = graphicEntityModule.createSprite() .setX(x) .setY(y) .setZIndex(20) @@ -121,7 +116,17 @@ public class Referee extends AbstractReferee { .setBaseHeight(116) .setBaseWidth(116); - Text stoneCounter = graphicEntityModule.createText("S") + player.avatar = graphicEntityModule.createGroup(border1, border2, avatarSprite); + + Text text = graphicEntityModule.createText(player.getNicknameToken()) + .setX(x) + .setY(y + 120) + .setZIndex(20) + .setFontSize(40) + .setFillColor(0x7f3f00) + .setAnchor(0.5); + + player.stoneCounter = graphicEntityModule.createText("S") .setX(x) .setY(y+200) .setZIndex(20) @@ -131,11 +136,13 @@ public class Referee extends AbstractReferee { player.castle = graphicEntityModule.createSprite() .setImage("castle.png") + .setTint(player.getColorToken()) .setX(p0 ? 160 : 1920-160) .setY(p0 ? 890 : 880) .setZIndex(1) .setAnchorX(0.5) - .setAnchorY(1); + .setAnchorY(1) + .setScaleX(p0 ? 1 : -1); player.stone = graphicEntityModule.createText() .setZIndex(3) @@ -144,8 +151,6 @@ public class Referee extends AbstractReferee { .setAnchor(0.5) .setAlpha(0); - player.hud = graphicEntityModule.createGroup(border1, border2, text, avatar, stoneCounter, player.castle); - player.stoneCounter = stoneCounter; } } @@ -203,12 +208,27 @@ public class Referee extends AbstractReferee { int delta = 0; for (Player player : gameManager.getActivePlayers()) { try { - final int stones = player.getAction(); + int stones = player.getAction(); + if (stones == 0 && player.getStones() > 0) { + if (random.nextInt(10) > 0) { + gameManager.addToGameSummary(GameManager.formatErrorMessage(player.getNicknameToken() + " tried not throwing stones. Fixing that for them because I'm in a good mood today.")); + stones = 1; + } + else { + throw new InvalidAction("tried not throwing any stone. They were then eaten by a grue."); + } + } player.consumeStones(stones); gameManager.addToGameSummary(String.format("%s throws %d stone%s at the troll.", player.getNicknameToken(), stones, stones == 1 ? "" : "s")); delta += player.getMultiplier() * stones; - if (stones > 0) { + if (stones < 0) { + player.deactivate(player.getNicknameToken() + " CHEAT"); + gameManager.addToGameSummary(GameManager.formatErrorMessage(player.getNicknameToken() + " cheated. Banning account.")); + player.setScore(-1); + endGame(); + } + else if (stones > 0) { player.stone.setX(player.castle.getX()); player.stone.setY(player.castle.getY() - 100); player.stone.setText(new Integer(stones).toString()); @@ -275,21 +295,32 @@ public class Referee extends AbstractReferee { } } + private void destroyPlayer(Player player) { + player.avatar.setRotation(170*Math.PI/180, Curve.ELASTIC); + + graphicEntityModule.commitEntityState(0.5, player.castle); + player.castle.setX(player.castle.getX(), Curve.ELASTIC); + player.castle.setScaleY(-0.2, Curve.EASE_IN); + } + private void endGame() { gameManager.endGame(); if (p0.getScore() > p1.getScore()) { gameManager.addToGameSummary(GameManager.formatSuccessMessage(p0.getNicknameToken() + " wins")); - p1.hud.setAlpha(0.3); + destroyPlayer(p1); } else if (p0.getScore() < p1.getScore()) { gameManager.addToGameSummary(GameManager.formatSuccessMessage(p1.getNicknameToken() + " wins")); - p0.hud.setAlpha(0.3); + destroyPlayer(p0); } - else { + else if (p0.getScore() < 0) { gameManager.addToGameSummary(GameManager.formatErrorMessage("Everybody loses!")); - p0.hud.setAlpha(0.3); - p1.hud.setAlpha(0.3); + destroyPlayer(p0); + destroyPlayer(p1); + } + else { + gameManager.addToGameSummary("Draw."); } } }