From 6254a2a433a98964f9c1af84a65ef0f5c4df8999 Mon Sep 17 00:00:00 2001 From: JBM Date: Sat, 30 May 2020 01:09:35 +0200 Subject: [PATCH 1/1] Trolls can be of different races --- PLAN.org | 2 +- config/statement_en.html | 2 +- src/main/java/com/codingame/game/View.java | 61 ++++++++++++++++++++-- src/test/java/Main.java | 1 + 4 files changed, 60 insertions(+), 6 deletions(-) diff --git a/PLAN.org b/PLAN.org index dab7564..560a564 100644 --- a/PLAN.org +++ b/PLAN.org @@ -48,7 +48,7 @@ That one's probably never going to be DONE ^^' - pain au chocolat ou chocolatine * DONE initial model parametrization * TODO view parameterization? -* TODO troll races +* DONE troll races * Publication checklist - [ ] demo is up-to-date - [ ] game name is updated to simple 'troll' diff --git a/config/statement_en.html b/config/statement_en.html index 0fe22ef..ff44618 100644 --- a/config/statement_en.html +++ b/config/statement_en.html @@ -140,7 +140,7 @@

This draft's last change is: - game parameters can be overridden. + trolls can be of different races.

diff --git a/src/main/java/com/codingame/game/View.java b/src/main/java/com/codingame/game/View.java index 45b4401..e72be69 100644 --- a/src/main/java/com/codingame/game/View.java +++ b/src/main/java/com/codingame/game/View.java @@ -189,7 +189,7 @@ class View { } void destroy() { - gameManager.addToGameSummary(GameManager.formatErrorMessage("Troll destroys " + nicknameToken + ".")); + gameManager.addToGameSummary(GameManager.formatErrorMessage(trollRace.starter + " destroys " + nicknameToken + ".")); graphicEntityModule.commitEntityState(0.5, castle); castle.setX(castle.getX(), Curve.ELASTIC); castle.setScaleY(-0.2, Curve.EASE_IN); @@ -209,7 +209,7 @@ class View { } void throwStones(int stones) { - gameManager.addToGameSummary(String.format("%s throws %d stone%s at the troll.", nicknameToken, stones, stones == 1 ? "" : "s")); + gameManager.addToGameSummary(String.format("%s throws %d stone%s at " + trollRace.nonStarter(), nicknameToken, stones, stones == 1 ? "" : "s")); } void threwMoreStonesThanHad() { @@ -348,12 +348,64 @@ class View { } } + enum TrollRace { + Troll("The troll", 0xfac200, "bland"), + IceTroll("The ice troll", 0x59a2a2, "ice"), + RockTroll("The rock troll", 0x78877f, "rock"), + WaterTroll("The water troll", 0x2b2fc6, "water"), + OlogHai("The Olog-Hai", 0x5b2e7d, "ologhai"); + String starter, parser; int tint; + TrollRace(String s, int t, String p) { + starter = s; + tint = t; + parser = p; + } + String nonStarter() { + return Character.toLowerCase(starter.charAt(0)) + + starter.substring(1); + } + } + TrollRace trollRace; + private void drawTroll() { + int r, league = gameManager.getLeagueLevel(); + if (league <= 1) r = 4; + else if (league <= 2) r = 8; + else r = 10; + + r = random.nextInt(r); + if (r < 4) trollRace = TrollRace.Troll; + else if (r < 6) trollRace = TrollRace.IceTroll; + else if (r < 8) trollRace = TrollRace.RockTroll; + else if (r < 9) trollRace = TrollRace.WaterTroll; + else if (r < 10) trollRace = TrollRace.OlogHai; + else throw new RuntimeException("Internal error: unknown troll race " + r); + + // We read it for debugging purposes, but don't echo it back + // to the IDE. It is, after all, *not* a map parameter! + String buf = gameManager.getGameParameters().getProperty("ehtnicity"); + if (buf != null) { + String key = ""; + for (char c : buf.toCharArray()) + if (Character.isLetter(c)) + key += Character.toLowerCase(c); + iHateJava: do { + for (TrollRace race : TrollRace.values()) { + if (key.equals(race.parser)) { + trollRace = race; + break/*ing news: */ iHateJava; + } + } + gameManager.addToGameSummary("Ignoring unknown troll race: " + buf); + } while (false); + } + photoFinish: ; // The race is through, but Java has no goto :-( + Sprite trollBody = graphicEntityModule.createSprite() .setImage("troll_body.png") .setAnchorX(0.5) .setAnchorY(1) - .setTint(0xfac200); + .setTint(trollRace.tint); Sprite trollPants = graphicEntityModule.createSprite() .setImage("pants_red.png") .setAnchorX(0.5) @@ -411,7 +463,7 @@ class View { void moveTroll(Dir d) { moveTroll(); - gameManager.addToGameSummary("Troll " + d.movement); + gameManager.addToGameSummary(trollRace.starter + " " + d.movement); trollMessage.setText(selectTrollMessage(d)).setAlpha(1, Curve.NONE); graphicEntityModule.commitEntityState(0.5, trollMessage); @@ -550,6 +602,7 @@ class View { { "pad > stick", "mouse gaming is lame", "stick > pad" }, { "RTS > FPS", "solitaire best game", "FPS > RTS" }, { "YT gaming > twitch", "i watch other ppl play", "twitch > YT gaming" }, + { "orcs are wusses", "the amulet is in another dungeon", "elves are wusses" }, // I'm not exactly a gamer myself, I take hints on the topics du jour // programming diff --git a/src/test/java/Main.java b/src/test/java/Main.java index 8de5bd7..1488dee 100644 --- a/src/test/java/Main.java +++ b/src/test/java/Main.java @@ -6,6 +6,7 @@ public class Main { public static void main(String[] args) { Properties props = new Properties(); props.setProperty("seed", "3"); + props.setProperty("ehtnicity", "ice"); MultiplayerGameRunner gameRunner = new MultiplayerGameRunner(); gameRunner.setGameParameters(props); -- 2.30.2