--- /dev/null
+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<Player> gameManager;
+
+ Player getPlayer(int index) { return gameManager.getPlayer(index); }
+ List<Player> getPlayers() { return gameManager.getPlayers(); }
+ List<Player> getActivePlayers() {
+ return gameManager.getPlayers().stream()
+ .filter(p -> p.isActive() && !p.model.hit)
+ .collect(Collectors.toList());
+ }
+
+ void endGame() { gameManager.endGame(); }
+}
class Model {
@Inject private MultiplayerGameManager<com.codingame.game.Player> gameManager;
+ long seed;
Random random;
int roadLength;
int initialStones;
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; }
}
}
- void init(long seed) {
+ void init() {
+ seed = gameManager.getSeed();
random = new Random(seed);
switch (random.nextInt(4)) {
case 0:
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<Player> gameManager;
+ @Inject private GameManager gameManager;
@Inject private GodModeManager gm;
@Inject private View view;
@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);
}
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
}
}
- /* 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.