Advertisement
makispaiktis

HeuristicPlayer

Dec 10th, 2018 (edited)
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.96 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class HeuristicPlayer extends Player {
  4.     ArrayList<Integer[]> path;
  5.     int perfectDice;
  6.    
  7.     //Constructors
  8.     public HeuristicPlayer() {
  9.         super();
  10.         path = new ArrayList<Integer[]>();
  11.     }
  12.    
  13.     public HeuristicPlayer(int playerId, String name, int score, Board templateBoard, ArrayList<Integer[]> templatePath) {
  14.         super(playerId, name, score, templateBoard);
  15.         path = new ArrayList<Integer[]>();
  16.         for(int i = 0; i < templatePath.size(); i ++) {
  17.             path.add(i, templatePath.get(i));
  18.         }
  19.     }
  20.    
  21.     public int heuristicMove(int id, int dice) {       
  22.         int tileNow = id + dice;
  23.        
  24.         // Search if tileNow == SnakeHead
  25.         for(int i=0; i<board.snakes.length; i++) {
  26.             if(board.snakes[i].getHeadId() == tileNow) {
  27.                 tileNow = board.snakes[i].getTailId();
  28.                 break;
  29.             }  
  30.         }
  31.        
  32.         // Search if tileNow == LadderUp
  33.         for(int i=0; i<board.ladders.length; i++) {
  34.             if(board.ladders[i].getDownStepId() == tileNow && !board.ladders[i].getBroken()) {
  35.                 tileNow = board.ladders[i].getUpStepId();
  36.                 break;
  37.             }
  38.         }
  39.        
  40.         // Search if tileNow = appleTileId
  41.         for(int i=0; i<board.apples.length; i++) {
  42.             if(board.apples[i].getAppleTileId() == tileNow) {
  43.                 switch(board.apples[i].getColor()) {
  44.                
  45.                     case "red":
  46.                         score += board.apples[i].getPoints();
  47.                         break;
  48.                    
  49.                    
  50.                     case "black":
  51.                         score -= board.apples[i].getPoints();
  52.                         break;
  53.                        
  54.                     default:
  55.                         System.out.println("Apples are red or black!");
  56.                 }
  57.             }
  58.         }
  59.         return tileNow;
  60.     }
  61.    
  62.     public double evaluate(int currentPos, int dice) {
  63.         int pointsBefore = score;
  64.         int finalPos = heuristicMove(currentPos, dice);
  65.         double weight = (finalPos - currentPos) * 0.65 + (score - pointsBefore) * 0.35;
  66.         score = pointsBefore;
  67.         return weight;
  68.     }
  69.    
  70.     public int getNextMove(int currentPos) {
  71.         //Initializing an array that will hold the weight result of each dice roll
  72.         double moveWeight[] = new double[6];
  73.         for(int i = 0; i < 6; i++) {
  74.             moveWeight[i] = evaluate(currentPos, i+1);
  75.         }
  76.         //Finding the best move and saving it
  77.         perfectDice = 1;
  78.         double maxWeight = moveWeight[0];
  79.         for(int i = 1; i < 6; i ++) {
  80.             if(moveWeight[i] > maxWeight) {
  81.                 maxWeight = moveWeight[i];
  82.                 perfectDice = i + 1;
  83.             }
  84.         }
  85.         //Appropriate typecasting from int[] to Integer[]
  86.         Integer temp[] = new Integer[5];
  87.         int tempMove[] = move(currentPos, perfectDice);
  88.         for(int i = 0; i < temp.length; i++) {
  89.             temp[i] = tempMove[i];
  90.         }
  91.         path.add(temp);
  92.         return tempMove[0];
  93.         //return path.get(path.size() - 1)[0];
  94.     }
  95.    
  96.     public void statistics() {
  97.         System.out.println("Round: " + path.size());
  98.         System.out.println("Dice: " + perfectDice);
  99.         System.out.println("Snake bites: " + path.get(path.size() - 1)[1]);
  100.         System.out.println("Ladders Used: " + path.get(path.size() - 1)[2]);
  101.         System.out.println("Red Apples Eaten: " + path.get(path.size() - 1)[3]);
  102.         System.out.println("Black Apples Eaten: " + path.get(path.size() - 1)[4]);
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement