A java snake game for A.U.TH. Data structures class
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

81 lignes
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. }