From e0290aa2bf6fe6c998d30101fcad648baa2cfcd5 Mon Sep 17 00:00:00 2001 From: JBM Date: Mon, 15 Jun 2020 00:39:49 +0200 Subject: [PATCH] FIX IT. (and curse Java) --- .../codingame/game/JavaLimitationError.java | 3 +++ .../com/codingame/game/LeagueManager.java | 4 ++++ src/main/java/com/codingame/game/Referee.java | 24 +++++++++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/codingame/game/JavaLimitationError.java diff --git a/src/main/java/com/codingame/game/JavaLimitationError.java b/src/main/java/com/codingame/game/JavaLimitationError.java new file mode 100644 index 0000000..4778a13 --- /dev/null +++ b/src/main/java/com/codingame/game/JavaLimitationError.java @@ -0,0 +1,3 @@ +package com.codingame.game; + +class JavaLimitationError extends InternalError {} diff --git a/src/main/java/com/codingame/game/LeagueManager.java b/src/main/java/com/codingame/game/LeagueManager.java index fe2187c..78f15f1 100644 --- a/src/main/java/com/codingame/game/LeagueManager.java +++ b/src/main/java/com/codingame/game/LeagueManager.java @@ -21,6 +21,9 @@ class LeagueManager { } MapLevel mapLevel; + enum FixLevel { SOMETIMES, NEVER } + FixLevel fixLevel; + @Inject LeagueManager(MultiplayerGameManager gameManager) { @@ -37,5 +40,6 @@ class LeagueManager { : level <= 2 ? MapLevel.DISCRETE : MapLevel.CONTINUOUS; + fixLevel = level <= 1 ? FixLevel.SOMETIMES : FixLevel.NEVER; } } diff --git a/src/main/java/com/codingame/game/Referee.java b/src/main/java/com/codingame/game/Referee.java index fb99ef9..7a718e9 100644 --- a/src/main/java/com/codingame/game/Referee.java +++ b/src/main/java/com/codingame/game/Referee.java @@ -81,7 +81,17 @@ public class Referee extends AbstractReferee { case Throw: try { player.model.consumeStones(player.stoneThrow); } catch (Model.Player.ThrewMoreStonesThanHad e) { - if (model.random.nextInt(10) > 0) { + boolean FIX_IT; + switch (league.fixLevel) { + case SOMETIMES: + FIX_IT = model.random.nextInt(10) > 0; + break; + case NEVER: + FIX_IT = false; + break; + default: throw new JavaLimitationError(); + } + if (FIX_IT) { player.view.threwMoreStonesThanHad(); player.stoneThrow = player.model.consumeMaxStones(); } @@ -92,7 +102,17 @@ public class Referee extends AbstractReferee { } } catch (Model.Player.FailedToThrowStonesAndShouldHave e) { - if (model.random.nextInt(10) > 0) { + boolean FIX_IT; + switch (league.fixLevel) { + case SOMETIMES: + FIX_IT = model.random.nextInt(10) > 0; + break; + case NEVER: + FIX_IT = false; + break; + default: throw new JavaLimitationError(); + } + if (FIX_IT) { player.view.failedToThrowStonesAndShouldHave(); player.stoneThrow = player.model.consumeMinStones(); } -- 2.30.2