X-Git-Url: https://troll.desast.re/troll.git/blobdiff_plain/00ef746e66b9aa761ca570cffea2a695f007fd9e..a78210b2e4295eaf8dee8215d4ffe5e062b4efb3:/src/main/java/com/codingame/game/Player.java diff --git a/src/main/java/com/codingame/game/Player.java b/src/main/java/com/codingame/game/Player.java index bf40000..63f9e50 100644 --- a/src/main/java/com/codingame/game/Player.java +++ b/src/main/java/com/codingame/game/Player.java @@ -1,69 +1,69 @@ package com.codingame.game; +import java.util.List; + +import java.util.regex.Pattern; +import java.util.Scanner; +import java.util.InputMismatchException; +import java.util.NoSuchElementException; + import com.codingame.gameengine.core.AbstractMultiplayerPlayer; import com.codingame.gameengine.module.entities.Group; import com.codingame.gameengine.module.entities.Text; import com.codingame.gameengine.module.entities.Sprite; public class Player extends AbstractMultiplayerPlayer { - Group avatar; - Text stoneCounter; - Sprite castle; - Text stone; - + Model.Player model; + View.Player view; - private int castlePosition; - public int getCastlePosition() { - return castlePosition; - } - public void setCastlePosition(int pos) { - castlePosition = pos; + @Override + public int getExpectedOutputLines() { + return 1; } - private int stones; - public int getStones() - { - return stones; - } - public void consumeStones(int n) throws InvalidAction { - if (n > stones) { - throw new InvalidAction("attempted to throw more stones than they had."); - } - setStones(stones - n); - } - public void setStones(int n) { - stones = n; - if (stones <= 0) { - stoneCounter.setText("No stones!"); - stoneCounter.setFillColor(0xff7777); - } - else if (stones == 1) { - stoneCounter.setText("1 stone"); - stoneCounter.setFillColor(0xffbb77); - } - else { - stoneCounter.setText(stones + " stones"); - } + // same-typed positional parameters… a disaster waiting to happen + void gameInit(int roadLength, int initialStones, long seed) { + sendInputLine(String.format("%d %d %d", + roadLength, initialStones, seed)); } - private int multiplier; - public int getMultiplier() { - return multiplier; - } - public void setMultiplier(int m){ - multiplier = m; - } + void sendGameTurn() { + type = null; // + stoneThrow = null; // correctness over stability! + messageString = null; // - public void adjustScore(int trollPosition) { - setScore(Math.abs(castlePosition - trollPosition)); + sendInputLine(String.format("%d %d %d", + model.getTrollDistance(), + model.getStones(), + model.getOppStones())); + execute(); } - @Override - public int getExpectedOutputLines() { - return 1; + static enum Action { Throw, Timeout, Invalid } + Action type; + Integer stoneThrow; + String messageString; + + private void reportMsg(String tag) { + System.err.println("Message @" + tag + ": " + messageString); } - public int getAction() throws TimeoutException, NumberFormatException { - return Integer.parseInt(getOutputs().get(0)); + void receiveGameTurn() { + messageString = ""; + try { messageString = getOutputs().get(0); } + catch (TimeoutException e) { type = Action.Timeout; return; } + + Scanner s = new Scanner(messageString); + try { stoneThrow = s.nextInt(); } + catch (InputMismatchException e) { type = Action.Invalid; return; } + catch (NoSuchElementException e) { type = Action.Invalid; return; } + + s.useDelimiter(eol); + if (s.hasNext(rest)) messageString = s.next(rest); + else messageString = ""; + type = Action.Throw; } + + private static final Pattern rest = Pattern.compile(".*"); + private static final Pattern eol = Pattern.compile("\n"); }