From 2032e4c0fbf3f7a170640aecdf41698f85dd9753 Mon Sep 17 00:00:00 2001 From: JBM Date: Thu, 11 Jun 2020 11:45:32 +0200 Subject: [PATCH] Facade the SDK's GameManager out --- .../java/com/codingame/game/GameManager.java | 23 +++++++++++++++++++ src/main/java/com/codingame/game/Model.java | 10 ++++++-- src/main/java/com/codingame/game/Referee.java | 17 +++++++------- src/main/java/com/codingame/game/View.java | 6 +++++ 4 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/codingame/game/GameManager.java diff --git a/src/main/java/com/codingame/game/GameManager.java b/src/main/java/com/codingame/game/GameManager.java new file mode 100644 index 0000000..3c1f429 --- /dev/null +++ b/src/main/java/com/codingame/game/GameManager.java @@ -0,0 +1,23 @@ +package com.codingame.game; + +import java.util.List; +import java.util.stream.Collectors; + +import com.codingame.gameengine.core.MultiplayerGameManager; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +@Singleton +public class GameManager { + @Inject private MultiplayerGameManager gameManager; + + Player getPlayer(int index) { return gameManager.getPlayer(index); } + List getPlayers() { return gameManager.getPlayers(); } + List getActivePlayers() { + return gameManager.getPlayers().stream() + .filter(p -> p.isActive() && !p.model.hit) + .collect(Collectors.toList()); + } + + void endGame() { gameManager.endGame(); } +} diff --git a/src/main/java/com/codingame/game/Model.java b/src/main/java/com/codingame/game/Model.java index 6eb0546..108b5a6 100644 --- a/src/main/java/com/codingame/game/Model.java +++ b/src/main/java/com/codingame/game/Model.java @@ -9,6 +9,7 @@ import com.google.inject.Inject; class Model { @Inject private MultiplayerGameManager gameManager; + long seed; Random random; int roadLength; int initialStones; @@ -18,8 +19,12 @@ class Model { class Player { com.codingame.game.Player gp; int index; + boolean hit; - Player(int i) { index = i; } + Player(int i) { + index = i; + hit = false; + } private int castlePosition; public int getCastlePosition() { return castlePosition; } @@ -76,7 +81,8 @@ class Model { } } - void init(long seed) { + void init() { + seed = gameManager.getSeed(); random = new Random(seed); switch (random.nextInt(4)) { case 0: diff --git a/src/main/java/com/codingame/game/Referee.java b/src/main/java/com/codingame/game/Referee.java index 67d96e0..3de5140 100644 --- a/src/main/java/com/codingame/game/Referee.java +++ b/src/main/java/com/codingame/game/Referee.java @@ -7,14 +7,12 @@ import java.util.Random; import com.codingame.gameengine.core.AbstractPlayer.TimeoutException; import com.codingame.gameengine.core.AbstractReferee; -import com.codingame.gameengine.core.GameManager; -import com.codingame.gameengine.core.MultiplayerGameManager; import com.codingame.game.GodModeManager; import com.google.inject.Inject; import com.google.inject.Provider; public class Referee extends AbstractReferee { - @Inject private MultiplayerGameManager gameManager; + @Inject private GameManager gameManager; @Inject private GodModeManager gm; @Inject private View view; @@ -25,24 +23,23 @@ public class Referee extends AbstractReferee { @Override public void init() { gm.init(); - model.init(gameManager.getSeed()); + model.init(); gameManager.getPlayer(0).model = model.p0; gameManager.getPlayer(1).model = model.p1; for (Player p: gameManager.getPlayers()) { p.gameInit(model.roadLength, model.initialStones, - gameManager.getSeed(), gm.getSalt()); + model.seed, gm.getSalt()); } view.init(model); gameManager.getPlayer(0).view = view.p0; gameManager.getPlayer(1).view = view.p1; - gameManager.setFrameDuration(2000); } private void disqualify(Player player, String popup, String message) { player.deactivate(player.getNicknameToken() + " " + popup); - gameManager.addToGameSummary(GameManager.formatErrorMessage(player.getNicknameToken() + " " + message)); + player.view.disqualify(message); player.setScore(-1); } @@ -108,7 +105,7 @@ public class Referee extends AbstractReferee { player.view.displayMessage(player.messageString); } - /* Update game model and view. + /* Update game model and view, stones' part. * * As a special case, the "cheater" (sending out negative * stones) handling is deferred here because we need to update @@ -135,7 +132,9 @@ public class Referee extends AbstractReferee { } } - /* If a player cheated, delta is unusable as is. + /* Update game model and view, troll part. + * + * If a player cheated, delta is unusable as is. * (Consider the case the player on the right sent * INT_MIN. INT_MIN * (-1) = INT_MIN, so that player * would both glean the stones *and* push the troll away. diff --git a/src/main/java/com/codingame/game/View.java b/src/main/java/com/codingame/game/View.java index 40aae3d..cdc4428 100644 --- a/src/main/java/com/codingame/game/View.java +++ b/src/main/java/com/codingame/game/View.java @@ -153,6 +153,10 @@ class View { graphicEntityModule.commitEntityState(0.0, stoneReminder); } + void disqualify(String message) { + gameManager.addToGameSummary(GameManager.formatErrorMessage(nicknameToken + " " + message)); + } + void victory() { gameManager.addToGameSummary(GameManager.formatSuccessMessage(nicknameToken + " wins.")); View.this.endgameFrame(); @@ -274,6 +278,8 @@ class View { void init(Model m) { model = m; + + gameManager.setFrameDuration(2000); drawBackground(); /* -- 2.30.2