7204af377438f944737556cd69a42b78964965f6
[troll.git] / src / main / java / com / codingame / game / Player.java
1 package com.codingame.game;
2
3 import java.util.regex.Pattern;
4 import java.util.Scanner;
5 import java.util.InputMismatchException;
6 import java.util.NoSuchElementException;
7
8 import com.codingame.gameengine.core.AbstractMultiplayerPlayer;
9 import com.codingame.gameengine.module.entities.Group;
10 import com.codingame.gameengine.module.entities.Text;
11 import com.codingame.gameengine.module.entities.Sprite;
12
13 public class Player extends AbstractMultiplayerPlayer {
14     Group avatar;
15     Text stoneCounter;
16     Text message;
17     Sprite castle;
18     Text stone;
19
20     private String messageString;
21     public String getMessageString() { return messageString; }
22
23     private int castlePosition;
24     public int getCastlePosition() { return castlePosition; }
25     public void setCastlePosition(int pos) { castlePosition = pos; }
26
27     private int stones;
28     public int getStones() { return stones; }
29     public void consumeStones(int n) throws InvalidAction {
30         if (n > stones) {
31             throw new InvalidAction("attempted to throw more stones than they had.");
32         }
33         setStones(stones - n);
34     }
35     public void setStones(int n) {
36         stones = n;
37         if (stones <= 0) {
38             stoneCounter.setText("No stones!");
39             stoneCounter.setFillColor(0xff7777);
40         }
41         else if (stones == 1) {
42             stoneCounter.setText("1 stone");
43             stoneCounter.setFillColor(0xffbb77);
44         }
45         else {
46             stoneCounter.setText(stones + " stones");
47         }
48     }
49
50     private int multiplier;
51     public int getMultiplier() { return multiplier; }
52     public void setMultiplier(int m){ multiplier = m; }
53
54     public void adjustScore(int trollPosition) {
55         setScore(Math.abs(castlePosition - trollPosition));
56     }
57
58     @Override
59     public int getExpectedOutputLines() {
60         return 1;
61     }
62
63     static final Pattern rest = Pattern.compile(".*");
64     static final Pattern eol = Pattern.compile("\n");
65     public int getAction() throws TimeoutException, NumberFormatException {
66         Scanner s = new Scanner(getOutputs().get(0));
67         messageString = "";
68         try {
69             int st = s.nextInt();
70             s.useDelimiter(eol);
71             if (s.hasNext(rest))
72                 messageString = s.next(rest);
73             return st;
74         }
75         catch (InputMismatchException e) { throw new NumberFormatException(); }
76         catch (NoSuchElementException e) { throw new NumberFormatException(); }
77     }
78 }