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;
+ }
+
+ void loseRound() {
+ hit = true;
+ winner = 1 - index;
+ }
private int castlePosition;
public int getCastlePosition() { return castlePosition; }
}
public void adjustScore(int trollPosition) {
- gp.setScore(Math.abs(castlePosition - trollPosition));
+ if (gp.isActive()) {
+ gp.setScore(Math.abs(castlePosition - trollPosition));
+ }
}
public int getTrollDistance() {
}
}
- void init(long seed) {
+ void init() {
+ seed = gameManager.getSeed();
random = new Random(seed);
switch (random.nextInt(4)) {
case 0:
p1.setStones(initialStones);
}
- private int winner;
- boolean haveWinner() {
- if (trollPosition == 0) {
+ void moveTroll(int delta) {
+ trollPosition += delta;
+ if (trollPosition <= 0) {
+ trollPosition = 0;
winner = 1;
- return true;
}
- else if (trollPosition == roadLength) {
+ if (trollPosition >= roadLength) {
+ trollPosition = roadLength;
winner = 0;
- return true;
- }
- else {
- return false;
}
+
+ p0.adjustScore(trollPosition);
+ p1.adjustScore(trollPosition);
+ }
+
+ private Integer winner;
+ boolean haveWinner() {
+ return winner != null;
}
+
int getWinner() { return winner; }
int getLoser() { return 1 - winner; }
boolean exhausted() {
- return p0.getStones() <= 0 && p1.getStones() <= 0;
+ return p0.getStones() <= 0 || p1.getStones() <= 0;
}
}