A java snake game for A.U.TH. Data structures class
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.3 KiB

  1. package net.hoo2.auth.dsproject.snake;
  2. import java.util.*;
  3. public class HeuristicPlayer
  4. extends Player {
  5. private ArrayList<Integer[]> path;
  6. public HeuristicPlayer() {
  7. super ();
  8. path = new ArrayList<Integer[]>();
  9. }
  10. HeuristicPlayer (int playerId, String name, Board board) {
  11. super (playerId, name, board);
  12. path = new ArrayList<Integer[]>();
  13. }
  14. @Override
  15. int dice () {
  16. return 1;
  17. }
  18. @Override
  19. int getNextMove (int tile) {
  20. Map<Integer, Double> moves = new HashMap<Integer, Double>();
  21. double max = Double.NEGATIVE_INFINITY;
  22. double ev = Double.NEGATIVE_INFINITY;
  23. int roll = 0;
  24. for (int r=1 ; r<=6 ; ++r) {
  25. moves.put (new Integer(r), evaluate (tile, r));
  26. if ((ev = moves.get(r)) > max) {
  27. max = ev;
  28. roll = r;
  29. }
  30. }
  31. Integer[] move_data = Arrays.stream(move (tile, roll, true))
  32. .boxed()
  33. .toArray(Integer[]::new);
  34. path.add(move_data);
  35. return tile + roll;
  36. }
  37. @Override
  38. void statistics (boolean verbose, boolean sum) {
  39. if (sum) {
  40. int nSnakes =0;
  41. int nLadders =0;
  42. int nRedApples =0;
  43. int nBlackApples =0;
  44. for (int i=0 ; i<path.size() ; ++i) {
  45. nSnakes += path.get(i)[MOVE_SNAKES_IDX];
  46. nLadders+= path.get(i)[MOVE_LADDERS_IDX];
  47. nRedApples += path.get(i)[MOVE_RED_APPLES_IDX];
  48. nBlackApples += path.get(i)[MOVE_BLACK_APPLES_IDX];
  49. }
  50. System.out.println("");
  51. System.out.println("*** Statistics for " + name + " ***");
  52. System.out.println(" Number of Snake bites : " + nSnakes);
  53. System.out.println(" Number of Ladders used : " + nLadders);
  54. System.out.println(" Number of Red Apples eaten : " + nRedApples);
  55. System.out.println(" Number of Black Apples eaten: " + nBlackApples);
  56. }
  57. else
  58. super.statistics(verbose, sum);
  59. }
  60. private double evaluate (int tile, int roll) {
  61. int[] check = new int[MOVE_DATA_SIZE];
  62. check = move(tile, roll, false);
  63. return 0.65*check[MOVE_STEPS_IDX] + 0.35*check[MOVE_POINTS_IDX];
  64. }
  65. }