extracted some logic to the piece class and

implemented the knights legal moves
This commit is contained in:
Karma Riuk 2025-01-30 17:07:19 +01:00
parent 6b0a134230
commit 96b9b3db86
4 changed files with 27 additions and 17 deletions

View File

@ -1,4 +1,4 @@
from logic.pieces.piece import Piece
# from logic.pieces.piece import Piece
from logic.position import Position
from enum import Enum
@ -15,7 +15,7 @@ class Move:
class PieceMove(Move):
def __init__(self, piece: Piece, pos: Position,/, is_capturing: bool = False) -> None:
def __init__(self, piece: "Piece", pos: Position,/, is_capturing: bool = False) -> None:
super().__init__(is_capturing)
self.piece = piece
self.pos = pos

View File

@ -3,20 +3,6 @@ from logic.position import Position
from .piece import Piece
class Bishop(Piece):
def _move_for_position(self, board: "Board", x: int, y: int) -> Move | None:
if not Position.is_within_bounds(x, y):
return None
piece = board.piece_at(x, y)
if piece is None:
return PieceMove(self, Position(x, y))
if piece.colour != self.colour:
return PieceMove(self, Position(x, y), is_capturing=True)
return None
def _look_direction(self, board: "Board", mult_dx: int, mult_dy: int):
ret = []
for d in range(1, 8):

View File

@ -1,5 +1,16 @@
from .piece import Piece
class Knight(Piece):
pass
def legal_moves(self, board: "Board") -> list["Move"]:
ret = []
for dx, dy in [
(+2, +1), (+1, +2), # north east
(+2, -1), (+1, -2), # south east
(-2, -1), (-1, -2), # south west
(-2, +1), (-1, +2), # north west
]:
move = self._move_for_position(board, self.pos.x + dx, self.pos.y + dy)
if move is not None:
ret.append(move)
return ret

View File

@ -1,3 +1,4 @@
from logic.move import Move, PieceMove
from logic.position import Position
from enum import Enum
@ -12,6 +13,18 @@ class Piece:
assert colour == Colour.WHITE or colour == Colour.BLACK, "The colour of the piece must be either Piece.WHITE or Piece.BLACK"
self.colour = colour
def _move_for_position(self, board: "Board", x: int, y: int) -> Move | None:
if not Position.is_within_bounds(x, y):
return None
piece = board.piece_at(x, y)
if piece is None:
return PieceMove(self, Position(x, y))
if piece.colour != self.colour:
return PieceMove(self, Position(x, y), is_capturing=True)
return None
def position(self) -> Position:
return self.pos