@cocacola-lover/knight_path_finder
Version:
Iterative path finding Algorithms for knight on a chessboard
49 lines (39 loc) • 1.8 kB
text/typescript
import ChessPointer from "./chess_pointer.js";
import { Square } from "./interfaces.js";
function createEmptySquare () : Square {
return {isPassable : true, weight : 1} as Square;
}
export default class Board {
squares : Square[][];
constructor(height : number, width : number) {
this.squares = [];
for (let i = 0; i < width; i++) {
this.squares.push([]);
for (let j = 0; j < height; j++) this.squares[i].push(createEmptySquare());
}
}
forEach (func : (value : Square, x : number, y : number) => any) {
for (let i = 0; i < this.squares.length; i++) {
for (let j = 0; j < this.squares[0].length; j++) {
func(this.squares[i][j], i, j);
}
}
}
createBasicPointer = (x : number, y: number) => new ChessPointer.BasicPointer(x, y, this.squares);
createKnightPointer = (x : number, y: number) => new ChessPointer.KnightPointer(x, y, this.squares);
createKingPointer = (x : number, y: number) => new ChessPointer.KingPointer(x, y, this.squares);
createBishopPointer = (x : number, y: number) => new ChessPointer.BishopPointer(x, y, this.squares);
createRookPointer = (x : number, y: number) => new ChessPointer.RookPointer(x, y, this.squares);
createPawnPointer = (x : number, y: number) => new ChessPointer.PawnPointer(x, y, this.squares);
createQueenPointer = (x : number, y: number) => new ChessPointer.QueenPointer(x, y, this.squares);
setPassability (arr : boolean[][]) {
this.forEach((value, x, y) => {
this.squares[x][y].isPassable = arr[x][y];
});
}
setWeight (arr : number[][]) {
this.forEach((value, x, y) => {
this.squares[x][y].weight = arr[x][y];
});
}
}