X-Git-Url: https://troll.desast.re/troll.git/blobdiff_plain/83de865a87657f62bc949433539351945bd04314..7b8732a6aba5c34e24aa324a25e2fae37f7149a7:/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 7204af3..cb5bb4a 100644 --- a/src/main/java/com/codingame/game/Player.java +++ b/src/main/java/com/codingame/game/Player.java @@ -1,5 +1,8 @@ package com.codingame.game; +import java.util.List; +import java.util.Random; + import java.util.regex.Pattern; import java.util.Scanner; import java.util.InputMismatchException; @@ -11,68 +14,62 @@ import com.codingame.gameengine.module.entities.Text; import com.codingame.gameengine.module.entities.Sprite; public class Player extends AbstractMultiplayerPlayer { - Group avatar; - Text stoneCounter; - Text message; - Sprite castle; - Text stone; - - private String messageString; - public String getMessageString() { return messageString; } + Model.Player model; + View.Player view; + Random random = new Random(); - private int castlePosition; - public int getCastlePosition() { return castlePosition; } - public void setCastlePosition(int pos) { castlePosition = pos; } - - 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); + @Override + public int getExpectedOutputLines() { + return 1; } - 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) { + int nReserved = random.nextInt(5); + String reserved = ""; + while (nReserved --> 0) reserved += " 0"; + sendInputLine(String.format("%d %d %d %d%s", + roadLength, initialStones, seed, + model.getMultiplier(), reserved)); } - 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); } - static final Pattern rest = Pattern.compile(".*"); - static final Pattern eol = Pattern.compile("\n"); - public int getAction() throws TimeoutException, NumberFormatException { - Scanner s = new Scanner(getOutputs().get(0)); + void receiveGameTurn() { messageString = ""; - try { - int st = s.nextInt(); - s.useDelimiter(eol); - if (s.hasNext(rest)) - messageString = s.next(rest); - return st; - } - catch (InputMismatchException e) { throw new NumberFormatException(); } - catch (NoSuchElementException e) { throw new NumberFormatException(); } + 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"); }