X-Git-Url: https://troll.desast.re/troll.git/blobdiff_plain/424174766971a11af0e953a6d5a328d466b8f68b..e85f0f22de883c7464b05cb4fe761a4cf46ae102:/src/main/java/com/codingame/game/Model.java?ds=sidebyside diff --git a/src/main/java/com/codingame/game/Model.java b/src/main/java/com/codingame/game/Model.java index 4cd1280..405db66 100644 --- a/src/main/java/com/codingame/game/Model.java +++ b/src/main/java/com/codingame/game/Model.java @@ -25,16 +25,37 @@ class Model { private int multiplier; public int getMultiplier() { return multiplier; } - public void setMultiplier(int m){ multiplier = m; } + public void setMultiplier(int m) { multiplier = m; } + + class FailedToThrowStonesAndShouldHave extends Exception {} + class ThrewMoreStonesThanHad extends Exception {} private int stones; public int getStones() { return stones; } - public void consumeStones(int n) throws InvalidAction { + public void consumeStones(int n) + throws ThrewMoreStonesThanHad, + FailedToThrowStonesAndShouldHave + { if (n > stones) { - throw new InvalidAction("attempted to throw more stones than they had."); + throw new ThrewMoreStonesThanHad(); + } + if (n == 0 && stones > 0) { + throw new FailedToThrowStonesAndShouldHave(); } setStones(stones - n); } + public int consumeMaxStones() { + int r = stones; + stones = 0; + return r; + } + public int consumeMinStones() { + if (stones < 1) { + throw new Error("Internal error: tried to consume min stones on an empty heap."); + } + stones--; + return 1; + } public void setStones(int n) { stones = n; } @@ -104,6 +125,7 @@ class Model { } } int getWinner() { return winner; } + int getLoser() { return 1 - winner; } boolean exhausted() { return p0.getStones() <= 0 && p1.getStones() <= 0;