Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.95 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3.  
  4. public class KnightShell {
  5.     private int[][] board;
  6.     private int[][] heuristic={
  7.             {2,3,4,4,4,4,3,2},
  8.             {3,4,6,6,6,6,4,3},
  9.             {4,6,8,8,8,8,6,4},
  10.             {4,6,8,8,8,8,6,4},
  11.             {4,6,8,8,8,8,6,4},
  12.             {4,6,8,8,8,8,6,4},
  13.             {3,4,6,6,6,6,4,3},
  14.             {2,3,4,4,4,4,3,2},
  15.     };
  16.     final int NUM_ROWS=8, NUM_COLS=8;
  17.    
  18.     private int moveCounter=1;
  19.     private int locRow, locCol;
  20.  
  21.     private final int[] H_SHIFT={2,1,-1,-2,-2,-1,1,2};
  22.     private final int[] V_SHIFT={-1,-2,-2,-1,1,2,2,1};
  23.  
  24.     public KnightShell(int startRow, int startCol){
  25.         locCol=startCol;
  26.         locRow=startRow;
  27.         board=new int[NUM_ROWS][NUM_COLS];
  28.     }
  29.  
  30.     public boolean runBasicTour(int startRow, int startCol){
  31.         boolean canMakeMove=false;
  32.         resetBoard();
  33.         moveCounter=1;
  34.         locRow=startRow;
  35.         locCol=startCol;
  36.         board[locRow][locCol]=moveCounter;
  37.         moveCounter++;
  38.         canMakeMove=makeMove();
  39.         while(canMakeMove){
  40.             canMakeMove=makeMove();
  41.         }
  42.         return moveCounter==65;
  43.  
  44.     }
  45.  
  46.     public boolean makeMove(){
  47.         boolean moveMade=false;
  48.         ArrayList<Integer>moves=getValidMoves();
  49.         if(moves.size()>0){
  50.             moveMade=true;
  51.             //pick random move
  52.             //pick best move
  53.             int move=(int)(Math.random()*moves.size());//pick a move
  54.             //update Location
  55.             locRow=locRow+V_SHIFT[moves.get(move)];
  56.             locCol=locCol+H_SHIFT[moves.get(move)];
  57.             //update board
  58.             board[locRow][locCol]=moveCounter;
  59.             //update heuristic
  60.             moveCounter++;
  61.         }
  62.  
  63.         return moveMade;
  64.     }
  65.  
  66.     public int pickBestMove(ArrayList<Integer> moves){
  67.         int row = locRow+V_SHIFT[moves.get(0)];
  68.         int col = ;
  69.         int accesVal=heuristic[row][col];
  70.     }
  71.    
  72.     public ArrayList<Integer> getValidMoves(){
  73.         ArrayList<Integer> moves=new ArrayList<>();
  74.  
  75.         for(int i=0; i<H_SHIFT.length; i++){
  76.             int vMove=locRow+V_SHIFT[i];
  77.             int hMove=locCol+H_SHIFT[i];
  78.             if(validMove(vMove, hMove)){
  79.                 moves.add(i);
  80.             }
  81.         }
  82.  
  83.         return moves;
  84.     }
  85.  
  86.     public boolean validMove(int row, int col){
  87.         //2,3
  88.         boolean validTop=row>=0;
  89.         boolean validBottom=row<board.length;
  90.         boolean validLeft=col>=0;
  91.  
  92.         return validTop&&validBottom&&validLeft&&col<board[row].length&&board[row][col]<1;
  93.     }
  94.  
  95.     public int getMoveCounter(){
  96.         return moveCounter;
  97.     }
  98.  
  99.     public void printBoard(){
  100.         for(int[] row: board){
  101.             System.out.println(Arrays.toString(row));
  102.         }
  103.     }
  104.  
  105.     public void resetBoard(){
  106.         for(int i=0; i<board.length; i++){
  107.             Arrays.fill(board[i], 0);
  108.         }
  109.     }
  110.  
  111.  
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement