|
- package net.hoo2.auth.dsproject.snake;
-
- import java.util.*;
-
- public class HeuristicPlayer
- extends Player {
-
- private ArrayList<Integer[]> path;
-
- public HeuristicPlayer() {
- super ();
- path = new ArrayList<Integer[]>();
- }
- HeuristicPlayer (int playerId, String name, Board board) {
- super (playerId, name, board);
- path = new ArrayList<Integer[]>();
- }
-
-
- @Override
- int dice () {
- return 1;
- }
-
- @Override
- int getNextMove (int tile) {
- Map<Integer, Double> moves = new HashMap<Integer, Double>();
- double max = Double.NEGATIVE_INFINITY;
- double ev = Double.NEGATIVE_INFINITY;
- int roll = 0;
-
- for (int r=1 ; r<=6 ; ++r) {
- moves.put (new Integer(r), evaluate (tile, r));
- if ((ev = moves.get(r)) > max) {
- max = ev;
- roll = r;
- }
- }
- Integer[] move_data = Arrays.stream(move (tile, roll, true))
- .boxed()
- .toArray(Integer[]::new);
- path.add(move_data);
- return tile + roll;
- }
-
- @Override
- void statistics (boolean verbose, boolean sum) {
- if (sum) {
- int nSnakes =0;
- int nLadders =0;
- int nRedApples =0;
- int nBlackApples =0;
-
- for (int i=0 ; i<path.size() ; ++i) {
- nSnakes += path.get(i)[MOVE_SNAKES_IDX];
- nLadders+= path.get(i)[MOVE_LADDERS_IDX];
- nRedApples += path.get(i)[MOVE_RED_APPLES_IDX];
- nBlackApples += path.get(i)[MOVE_BLACK_APPLES_IDX];
- }
- System.out.println("");
- System.out.println("*** Statistics for " + name + " ***");
- System.out.println(" Number of Snake bites : " + nSnakes);
- System.out.println(" Number of Ladders used : " + nLadders);
- System.out.println(" Number of Red Apples eaten : " + nRedApples);
- System.out.println(" Number of Black Apples eaten: " + nBlackApples);
-
- }
- else
- super.statistics(verbose, sum);
- }
-
-
-
- private double evaluate (int tile, int roll) {
- int[] check = new int[MOVE_DATA_SIZE];
- check = move(tile, roll, false);
-
- return 0.65*check[MOVE_STEPS_IDX] + 0.35*check[MOVE_POINTS_IDX];
- }
- }
|