@Inject private MultiplayerGameManager<Player> gameManager;
@Inject private GraphicEntityModule graphicEntityModule;
- Random random;
+ @Inject private View view;
- int roadLength;
- int initialStones;
- int trollPosition;
+ Model model = new Model();
+
+ // Hybrid :-(
Player p0, p1;
- Sprite troll;
- Text trollPositionGauge;
-
+
@Override
public void init() {
- random = new Random(gameManager.getSeed());
- switch (random.nextInt(4)) {
- case 0:
- roadLength = 7;
- initialStones = 15;
- break;
- case 1:
- roadLength = 7;
- initialStones = 30;
- break;
- case 2:
- roadLength = 15;
- initialStones = 30;
- break;
- case 3:
- roadLength = 15;
- initialStones = 50;
- break;
- }
-
- trollPosition = (roadLength - 1) / 2;
+ model.init(gameManager.getSeed());
p0 = gameManager.getPlayer(0);
p0.setCastlePosition(0);
p0.setMultiplier(1);
- p0.adjustScore(trollPosition);
- p0.sendInputLine(String.format("%d %d", roadLength - 1, initialStones));
+ p0.adjustScore(model.trollPosition);
+ p0.sendInputLine(String.format("%d %d", model.roadLength, model.initialStones));
p1 = gameManager.getPlayer(1);
- p1.setCastlePosition(roadLength-1);
+ p1.setCastlePosition(model.roadLength);
p1.setMultiplier(-1);
- p1.adjustScore(trollPosition);
- p1.sendInputLine(String.format("%d %d", roadLength - 1, initialStones));
+ p1.adjustScore(model.trollPosition);
+ p1.sendInputLine(String.format("%d %d", model.roadLength, model.initialStones));
- drawBackground();
+ view.init();
drawPlayer();
- drawTroll();
// result in text display, so do last:
- p0.setStones(initialStones);
- p1.setStones(initialStones);
+ p0.setStones(model.initialStones);
+ p1.setStones(model.initialStones);
- gameManager.setFrameDuration(2000);
- }
-
- private void drawBackground() {
- graphicEntityModule.createSprite()
- .setImage("background.png")
- .setAnchor(0);
+ gameManager.setFrameDuration(2000); // XXX
}
private void drawPlayer() {
.setFillColor(0x7f3f00)
.setAnchor(0.5);
+ player.message = graphicEntityModule.createText()
+ .setX(p0 ? 15 : 1920-15)
+ .setY(680)
+ .setZIndex(1)
+ .setFontSize(40)
+ .setStrokeColor(0x000000)
+ .setFillColor(0xffbf7f)
+ .setAnchorX(p0 ? 0 : 1)
+ .setAnchorY(1);
+
player.castle = graphicEntityModule.createSprite()
.setImage("castle.png")
.setTint(player.getColorToken())
.setFillColor(0x12322a)
.setAnchor(0.5)
.setAlpha(0);
-
}
}
- private void drawTroll() {
- troll = graphicEntityModule.createSprite()
- .setImage("troll.png")
- .setAnchorX(0.5)
- .setAnchorY(1)
- .setX(1920/2)
- .setY(880)
- .setZIndex(2);
- trollPositionGauge = graphicEntityModule.createText()
- .setZIndex(2)
- .setAnchor(0.5)
- .setFontSize(40)
- .setX(1980/2)
- .setY(980)
- .setFillColor(0xffffff);
- }
-
private void moveTroll() {
- graphicEntityModule.commitEntityState(0.5, troll, trollPositionGauge);
+ graphicEntityModule.commitEntityState(0.5, view.troll, view.trollPositionGauge);
int x0 = p0.castle.getX(), x1 = p1.castle.getX();
int y0 = p0.castle.getY(), y1 = p1.castle.getY();
- troll.setX(x0 + trollPosition * (x1-x0) / (roadLength - 1),
+ view.troll.setX(x0 + model.trollPosition * (x1-x0) / model.roadLength,
Curve.ELASTIC);
- troll.setY(y0 + trollPosition * (y1-y0) / (roadLength - 1),
+ view.troll.setY(y0 + model.trollPosition * (y1-y0) / model.roadLength,
Curve.ELASTIC);
- trollPositionGauge.setX((trollPositionGauge.getX() + troll.getX()) / 2);
- int delta = trollPosition - (roadLength - 1) / 2;
+ view.trollPositionGauge.setX((view.trollPositionGauge.getX() + view.troll.getX()) / 2);
+ int delta = model.trollPosition - model.roadLength / 2;
if (delta < 0) {
- trollPositionGauge.setText("← " + Math.abs(delta));
+ view.trollPositionGauge.setText("← " + Math.abs(delta));
}
else if (delta > 0) {
- trollPositionGauge.setText(Math.abs(delta) + " →");
+ view.trollPositionGauge.setText(Math.abs(delta) + " →");
}
else {
- trollPositionGauge.setText("↔");
+ view.trollPositionGauge.setText("↔");
}
- graphicEntityModule.commitEntityState(0.75, trollPositionGauge);
- trollPositionGauge.setX(troll.getX());
+ graphicEntityModule.commitEntityState(0.75, view.trollPositionGauge);
+ view.trollPositionGauge.setX(view.troll.getX());
}
@Override
try {
int stones = player.getAction();
if (stones == 0 && player.getStones() > 0) {
- if (random.nextInt(10) > 0) {
+ if (model.random.nextInt(10) > 0) {
gameManager.addToGameSummary(GameManager.formatErrorMessage(player.getNicknameToken() + " tried not throwing stones. Fixing that for them because I'm in a good mood today."));
stones = 1;
}
player.stone.setAlpha(1);
graphicEntityModule.commitEntityState(0, player.stone);
- int peakX = (player.castle.getX() + troll.getX()) / 2;
+ int peakX = (player.castle.getX() + view.troll.getX()) / 2;
int peakY = 540;
player.stone.setX(peakX);
player.stone.setY(peakY, Curve.EASE_OUT);
graphicEntityModule.commitEntityState(0.25, player.stone,
player.stoneCounter);
- player.stone.setX(troll.getX());
- player.stone.setY(troll.getY() - 50, Curve.EASE_IN);
+ player.stone.setX(view.troll.getX());
+ player.stone.setY(view.troll.getY() - 50, Curve.EASE_IN);
player.stone.setAlpha(0, Curve.EASE_IN);
graphicEntityModule.commitEntityState(0.5, player.stone);
}
player.setScore(-1);
endGame();
}
+
+ player.message
+ .setText(player.getMessageString());
+ // .setAnchorX(/*player == p0 ? 0 : */ 1);
+ graphicEntityModule.commitEntityState(0, player.message);
}
if (delta > 0) {
gameManager.addToGameSummary("Troll walks right.");
- trollPosition++;
+ model.trollPosition++;
moveTroll();
}
else if (delta < 0) {
gameManager.addToGameSummary("Troll walks left.");
- trollPosition--;
+ model.trollPosition--;
moveTroll();
}
else {
}
for (Player player : gameManager.getActivePlayers()) {
- player.adjustScore(trollPosition);
- if (trollPosition == player.getCastlePosition()) {
+ player.adjustScore(model.trollPosition);
+ if (model.trollPosition == player.getCastlePosition()) {
gameManager.addToGameSummary(GameManager.formatErrorMessage("Troll destroys " + player.getNicknameToken()));
endGame();
}
}
private void endGame() {
- gameManager.endGame();
+ if (! gameManager.isGameEnd()) {
+ gameManager.endGame();
- if (p0.getScore() > p1.getScore()) {
- gameManager.addToGameSummary(GameManager.formatSuccessMessage(p0.getNicknameToken() + " wins"));
- destroyPlayer(p1);
- }
- else if (p0.getScore() < p1.getScore()) {
- gameManager.addToGameSummary(GameManager.formatSuccessMessage(p1.getNicknameToken() + " wins"));
- destroyPlayer(p0);
- }
- else if (p0.getScore() < 0) {
- gameManager.addToGameSummary(GameManager.formatErrorMessage("Everybody loses!"));
- destroyPlayer(p0);
- destroyPlayer(p1);
- }
- else {
- gameManager.addToGameSummary("Draw.");
+ if (p0.getScore() > p1.getScore()) {
+ gameManager.addToGameSummary(GameManager.formatSuccessMessage(p0.getNicknameToken() + " wins"));
+ destroyPlayer(p1);
+ }
+ else if (p0.getScore() < p1.getScore()) {
+ gameManager.addToGameSummary(GameManager.formatSuccessMessage(p1.getNicknameToken() + " wins"));
+ destroyPlayer(p0);
+ }
+ else if (p0.getScore() < 0) {
+ gameManager.addToGameSummary(GameManager.formatErrorMessage("Everybody loses!"));
+ destroyPlayer(p0);
+ destroyPlayer(p1);
+ }
+ else {
+ gameManager.addToGameSummary("Draw.");
+ }
}
}
}