Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Arrays;
- public class KnightShell {
- private int[][] board;
- private int[][] heuristic={
- {2,3,4,4,4,4,3,2},
- {3,4,6,6,6,6,4,3},
- {4,6,8,8,8,8,6,4},
- {4,6,8,8,8,8,6,4},
- {4,6,8,8,8,8,6,4},
- {4,6,8,8,8,8,6,4},
- {3,4,6,6,6,6,4,3},
- {2,3,4,4,4,4,3,2},
- };
- final int NUM_ROWS=8, NUM_COLS=8;
- private int moveCounter=1;
- private int locRow, locCol;
- private final int[] H_SHIFT={2,1,-1,-2,-2,-1,1,2};
- private final int[] V_SHIFT={-1,-2,-2,-1,1,2,2,1};
- public KnightShell(int startRow, int startCol){
- locCol=startCol;
- locRow=startRow;
- board=new int[NUM_ROWS][NUM_COLS];
- }
- public boolean runBasicTour(int startRow, int startCol){
- boolean canMakeMove=false;
- resetBoard();
- moveCounter=1;
- locRow=startRow;
- locCol=startCol;
- board[locRow][locCol]=moveCounter;
- moveCounter++;
- canMakeMove=makeMove();
- while(canMakeMove){
- canMakeMove=makeMove();
- }
- return moveCounter==65;
- }
- public boolean makeMove(){
- boolean moveMade=false;
- ArrayList<Integer>moves=getValidMoves();
- if(moves.size()>0){
- moveMade=true;
- //pick random move
- //pick best move
- int move=(int)(Math.random()*moves.size());//pick a move
- //update Location
- locRow=locRow+V_SHIFT[moves.get(move)];
- locCol=locCol+H_SHIFT[moves.get(move)];
- //update board
- board[locRow][locCol]=moveCounter;
- //update heuristic
- moveCounter++;
- }
- return moveMade;
- }
- public int pickBestMove(ArrayList<Integer> moves){
- int row = locRow+V_SHIFT[moves.get(0)];
- int col = ;
- int accesVal=heuristic[row][col];
- }
- public ArrayList<Integer> getValidMoves(){
- ArrayList<Integer> moves=new ArrayList<>();
- for(int i=0; i<H_SHIFT.length; i++){
- int vMove=locRow+V_SHIFT[i];
- int hMove=locCol+H_SHIFT[i];
- if(validMove(vMove, hMove)){
- moves.add(i);
- }
- }
- return moves;
- }
- public boolean validMove(int row, int col){
- //2,3
- boolean validTop=row>=0;
- boolean validBottom=row<board.length;
- boolean validLeft=col>=0;
- return validTop&&validBottom&&validLeft&&col<board[row].length&&board[row][col]<1;
- }
- public int getMoveCounter(){
- return moveCounter;
- }
- public void printBoard(){
- for(int[] row: board){
- System.out.println(Arrays.toString(row));
- }
- }
- public void resetBoard(){
- for(int i=0; i<board.length; i++){
- Arrays.fill(board[i], 0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement