Advertisement
_TruELecter_

Untitled

Dec 11th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.03 KB | None | 0 0
  1. package truelecter.checkers.client;
  2.  
  3. import java.util.Arrays;
  4.  
  5. import checkers.client.CheckersBot;
  6. import checkers.client.Client;
  7. import checkers.pojo.board.Letters;
  8. import checkers.pojo.board.Numbers;
  9. import checkers.pojo.checker.Checker;
  10. import checkers.pojo.checker.CheckerColor;
  11. import checkers.pojo.checker.CheckerType;
  12. import checkers.pojo.checker.Position;
  13. import checkers.pojo.step.Step;
  14. import checkers.pojo.step.StepUnit;
  15. import truelecter.checkers.board.Board;
  16. import truelecter.checkers.board.Board.Cell;
  17. import truelecter.checkers.board.Move;
  18. import truelecter.checkers.board.MoveChain;
  19. import truelecter.checkers.search.MiniMax;
  20. import truelecter.checkers.search.evaluator.Oracle;
  21.  
  22. public class AIPlayerClient {
  23.  
  24. private static class BooleanWrapper {
  25. private boolean value;
  26.  
  27. public BooleanWrapper(boolean b) {
  28. value = b;
  29. }
  30.  
  31. public boolean set(boolean v) {
  32. value = v;
  33. return value;
  34. }
  35. }
  36.  
  37. private static CheckerColor myColor = null;
  38.  
  39. public static void main(final String[] args) {
  40. int port;
  41. try {
  42. port = args.length > 1 ? Integer.valueOf(args[1]) : 3000;
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. System.out.println("Using default port: 3000");
  46. port = 3000;
  47. }
  48. String ip = args.length > 0 ? args[0] : "localhost";
  49.  
  50. final MiniMax mm = new MiniMax(new Oracle());
  51. final BooleanWrapper isWhite = new BooleanWrapper(false);
  52. final BooleanWrapper asWhiteFirstMoveDone = new BooleanWrapper(false);
  53.  
  54. Client client = new Client(ip, port, new CheckersBot() {
  55. @Override
  56. public void onGameStart(CheckerColor checkerColor) {
  57. System.out.println(checkerColor);
  58. isWhite.set(checkerColor == CheckerColor.WHITE);
  59. myColor = checkerColor;
  60. }
  61.  
  62. @Override
  63. public Step next(checkers.pojo.board.Board board) {
  64. System.out.println("My turn");
  65. if (isWhite.value && !asWhiteFirstMoveDone.value) {
  66. return FIRST_MOVE_WHITE;
  67. }
  68. Board b = translate(board, isWhite.value);
  69. System.out.println(b);
  70. MoveChain mc = mm.perform(b, (byte) 4, (byte) -1);
  71. System.out.println("Choosen move: " + mc);
  72. return translate(mc, isWhite.value);
  73. }
  74.  
  75. @Override
  76. public void onGameEnd(String s) {
  77. System.out.println(s);
  78. }
  79.  
  80. @Override
  81. public String clientBotName() {
  82. return args.length > 2 ? args[2] : "Hikki";
  83. }
  84. });
  85. client.run();
  86. }
  87.  
  88. private static Board translate(checkers.pojo.board.Board b, boolean isWhite) {
  89. byte[][] rb = new byte[8][8];
  90.  
  91. for (Checker c : b.getCheckers()) {
  92. byte sign = (byte) (c.getColor() == myColor ? -1 : 1);
  93. System.out.println("sign " + sign + ", checker = " + c);
  94. byte[] pos = translate(c.getPosition(), isWhite);
  95. rb[pos[0]][pos[1]] = (byte) (sign * (c.getType() == CheckerType.SIMPLE ? 1 : 10));
  96. System.out.println("rb[" + pos[0] + "][" + pos[1] + "] = " + rb[pos[0]][pos[1]]);
  97. }
  98. System.out.println("Converted: ");
  99. Board res = new Board(rb);
  100. System.out.println(res);
  101. return res;
  102. }
  103.  
  104. private static Step translate(MoveChain mc, boolean isWhite) {
  105. Step s = new Step();
  106. for (int i = 0; i < mc.size(); i++) {
  107. Move m = mc.get(i);
  108. s.addStep(new StepUnit(translate(m.from, isWhite), translate(m.to, isWhite)));
  109. }
  110. return s;
  111. }
  112.  
  113. private static byte[] translate(Position p, boolean isWhite) {
  114. byte rx, ry;
  115. if (!isWhite) {
  116. // rx = (byte) (p.getLetter().getValue() - 1);
  117. // ry = (byte) (8 - p.getNumber().getValue());
  118. rx = (byte) (p.getLetter().getValue() - 1);
  119. ry = (byte) (p.getNumber().getValue() - 1);
  120. } else {
  121. // rx = (byte) (8 - p.getLetter().getValue());
  122. // ry = (byte) (p.getNumber().getValue() - 1);
  123. rx = (byte) (8 - p.getLetter().getValue());
  124. ry = (byte) (8 - p.getNumber().getValue());
  125. }
  126. return new byte[] { ry, rx };
  127. }
  128.  
  129. private static Position translate(Cell c, boolean isWhite) {
  130. Letters l;
  131. Numbers n;
  132. if (isWhite) {
  133. l = Letters.getByValue(c.x + 1);
  134. n = Numbers.getByValue(c.y + 1);
  135. } else {
  136. l = Letters.getByValue(8 - c.x);
  137. n = Numbers.getByValue(8 - c.y);
  138. }
  139. return new Position(l, n);
  140. }
  141.  
  142. private static final Step FIRST_MOVE_WHITE = new Step(
  143. Arrays.asList(new StepUnit[] { new StepUnit(new Position(Letters.B, Numbers._6), new Position(Letters.A, Numbers._5)) }));
  144.  
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement