diff options
author | Camil Staps | 2015-02-17 20:56:57 +0100 |
---|---|---|
committer | Camil Staps | 2015-02-17 20:56:57 +0100 |
commit | 51ab2857bbe0587fd2f6e828824e825527aa4d77 (patch) | |
tree | fa0c22faf14e4cfd66617c446a67bc3849914fac /backyard | |
parent | Added java-bot project (diff) |
Added example bot
Diffstat (limited to 'backyard')
5 files changed, 237 insertions, 0 deletions
diff --git a/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/Bot.java b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/Bot.java new file mode 100644 index 0000000..217ffb5 --- /dev/null +++ b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/Bot.java @@ -0,0 +1,15 @@ +package nl.camilstaps.botleagues.bot; + +import nl.camilstaps.botleagues.game.*; + +public interface Bot { + + /** + * Get the next move according to a state + * + * @param the current state + * @return the move to do + */ + public Move getMove(BotState state); + +} diff --git a/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotParser.java b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotParser.java new file mode 100644 index 0000000..c1fab26 --- /dev/null +++ b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotParser.java @@ -0,0 +1,80 @@ +package nl.camilstaps.botleagues.bot; + +import java.util.Scanner; + +import nl.camilstaps.botleagues.game.Move; + +/** + * Example bot parser + * + * @author Camil Staps <info@camilstaps.nl> + */ +public class BotParser { + + /** + * stdin scanner and bot object + */ + final Scanner scan; + final Bot bot; + + /** + * Constructor + * + * @param bot + */ + public BotParser(Bot bot) { + this.bot = bot; + scan = new Scanner(System.in); + } + + /** + * Run the bot + */ + public void run() { + // Hold the state of the bot + BotState state = new BotState(); + + // Keep reading stdin + while (scan.hasNextLine()) { + + String line = scan.nextLine().trim(); + if (line.length() == 0) { + continue; + } + + // Split the line up in parts by whitespace + String[] parts = line.split("\\s+"); + + // What to do? + if (parts[0].equals("Guess")) { // Do we have to make a guess? + state.setState(BotState.STATE_GUESS); + Move move = bot.getMove(state); + System.out.println(move.toString()); + System.out.flush(); + } else if (parts[0].equals("Finish")) { // Are we finished? + state.setState(BotState.STATE_FINISH); + if (parts[1].equals("win")) { // What is the result? + state.setResult(BotState.RESULT_WIN); + } else if (parts[1].equals("tie")) { + state.setResult(BotState.RESULT_TIE); + } else if (parts[1].equals("loss")) { + state.setResult(BotState.RESULT_LOSS); + } else { + state.setResult(BotState.RESULT_NONE); + } + return; + } else { // Unparseable input + unparseable(line); + } + } + } + + /** + * Show error message on stderr for unparseable input + * + * @param line + */ + public void unparseable(String line) { + System.err.println("Unable to parse line ``"+line+"''"); + } +} diff --git a/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotStarter.java b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotStarter.java new file mode 100644 index 0000000..a641400 --- /dev/null +++ b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotStarter.java @@ -0,0 +1,37 @@ +package nl.camilstaps.botleagues.bot; + +import nl.camilstaps.botleagues.game.Move; + +/** + * Example bot + * + * @author Camil Staps <info@camilstaps.nl> + */ +public class BotStarter implements Bot { + + /** + * Keep track of the number of guess calls we received + */ + private int nr_calls = 0; + + /** + * Start up a parser + * Command-line parameters are ignored + * + * @param args + */ + public static void main(String[] args) { + BotParser parser = new BotParser(new BotStarter()); + parser.run(); + } + + @Override + public Move getMove(BotState state) { + if (nr_calls++ % 2 == 0) { + return new Move(nr_calls * 2); + } else { + return new Move(nr_calls * nr_calls); + } + } + +} diff --git a/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotState.java b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotState.java new file mode 100644 index 0000000..440cef4 --- /dev/null +++ b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/bot/BotState.java @@ -0,0 +1,67 @@ +package nl.camilstaps.botleagues.bot; + +/** + * Current state of the game + * + * @author camilstaps + */ +public class BotState { + + /** + * Several constants for the state of the game (at the start; we have to guess; finished) + */ + public static final int STATE_START = -1; + public static final int STATE_GUESS = 0; + public static final int STATE_FINISH = 1; + + /** + * Several constants for the result of the game (none; win; tie; loss) + */ + public static final int RESULT_NONE = -1; + public static final int RESULT_WIN = 0; + public static final int RESULT_TIE = 1; + public static final int RESULT_LOSS = 2; + + /** + * Private properties to hold the state and the result + */ + private int state = STATE_START; + private int result = RESULT_NONE; + + /** + * Set the state + * + * @param new_state + */ + public void setState(int new_state) { + state = new_state; + } + + /** + * Get the state + * + * @return the state + */ + public int getState() { + return state; + } + + /** + * Set the result + * + * @param new_result + */ + public void setResult(int new_result) { + result = new_result; + } + + /** + * Get the result + * + * @return the result + */ + public int getResult() { + return result; + } + +} diff --git a/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/game/Move.java b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/game/Move.java new file mode 100644 index 0000000..b2e1db5 --- /dev/null +++ b/backyard/java-bot/trunk/src/nl/camilstaps/botleagues/game/Move.java @@ -0,0 +1,38 @@ +package nl.camilstaps.botleagues.game; + +/** + * Move in the guess-a-number game + * + * @author Camil Staps <info@camilstaps.nl> + */ +public class Move { + + /** + * The number we guess + */ + private int number; + + /** + * Constructor + * + * @param nr + */ + public Move(int nr) { + number = nr; + } + + /** + * Get the number we guessed + * + * @return + */ + public int getNumber() { + return number; + } + + @Override + public String toString() { + return Integer.toString(number); + } + +} |