getPossibleMovesFromSquareOnBoard method
Returns the list of possible moves with this piece from square
,
including moves that are illegal in current position.
Implementation
@override
List<Move> getPossibleMovesFromSquareOnBoard(
Square square,
Board board,
) {
final List<Move> possibleMoves = <Move>[];
if (isWhite) {
int offset = 1;
// N
while (square.row + offset < Board.size &&
board.at(square.row + offset, square.col) == null) {
possibleMoves
.add(Move(square, Square(square.row + offset, square.col)));
offset++;
}
if (square.row + offset < Board.size &&
(board.at(square.row + offset, square.col)?.isBlack ?? false)) {
possibleMoves
.add(Move(square, Square(square.row + offset, square.col)));
}
// E
offset = 1;
while (square.col + offset < Board.size &&
board.at(square.row, square.col + offset) == null) {
possibleMoves
.add(Move(square, Square(square.row, square.col + offset)));
offset++;
}
if (square.col + offset < Board.size &&
(board.at(square.row, square.col + offset)?.isBlack ?? false)) {
possibleMoves
.add(Move(square, Square(square.row, square.col + offset)));
}
// S
offset = 1;
while (square.row - offset >= 0 &&
board.at(square.row - offset, square.col) == null) {
possibleMoves
.add(Move(square, Square(square.row - offset, square.col)));
offset++;
}
if (square.row - offset >= 0 &&
(board.at(square.row - offset, square.col)?.isBlack ?? false)) {
possibleMoves
.add(Move(square, Square(square.row - offset, square.col)));
}
// W
offset = 1;
while (square.col - offset >= 0 &&
board.at(square.row, square.col - offset) == null) {
possibleMoves
.add(Move(square, Square(square.row, square.col - offset)));
offset++;
}
if (square.col - offset >= 0 &&
(board.at(square.row, square.col - offset)?.isBlack ?? false)) {
possibleMoves
.add(Move(square, Square(square.row, square.col - offset)));
}
} else {
int offset = 1;
// N
while (square.row + offset < Board.size &&
board.at(square.row + offset, square.col) == null) {
possibleMoves
.add(Move(square, Square(square.row + offset, square.col)));
offset++;
}
if (square.row + offset < Board.size &&
(board.at(square.row + offset, square.col)?.isWhite ?? false)) {
possibleMoves
.add(Move(square, Square(square.row + offset, square.col)));
}
// E
offset = 1;
while (square.col + offset < Board.size &&
board.at(square.row, square.col + offset) == null) {
possibleMoves
.add(Move(square, Square(square.row, square.col + offset)));
offset++;
}
if (square.col + offset < Board.size &&
(board.at(square.row, square.col + offset)?.isWhite ?? false)) {
possibleMoves
.add(Move(square, Square(square.row, square.col + offset)));
}
// S
offset = 1;
while (square.row - offset >= 0 &&
board.at(square.row - offset, square.col) == null) {
possibleMoves
.add(Move(square, Square(square.row - offset, square.col)));
offset++;
}
if (square.row - offset >= 0 &&
(board.at(square.row - offset, square.col)?.isWhite ?? false)) {
possibleMoves
.add(Move(square, Square(square.row - offset, square.col)));
}
// W
offset = 1;
while (square.col - offset >= 0 &&
board.at(square.row, square.col - offset) == null) {
possibleMoves
.add(Move(square, Square(square.row, square.col - offset)));
offset++;
}
if (square.col - offset >= 0 &&
(board.at(square.row, square.col - offset)?.isWhite ?? false)) {
possibleMoves
.add(Move(square, Square(square.row, square.col - offset)));
}
}
return possibleMoves;
}