moved everything related to python in the python
folder
This commit is contained in:
65
python/src/logic/pieces/piece.py
Normal file
65
python/src/logic/pieces/piece.py
Normal file
@ -0,0 +1,65 @@
|
||||
from logic.move import Move
|
||||
from logic.position import Position
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class Colour(Enum):
|
||||
WHITE = "white"
|
||||
BLACK = "black"
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.value
|
||||
|
||||
class Piece:
|
||||
def __init__(self, pos: Position, colour: Colour) -> None:
|
||||
self.pos = pos
|
||||
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 letter(self):
|
||||
return type(self).__name__[0].lower()
|
||||
|
||||
def keep_only_blocking(self, candidates: list[Move], board: "Board") -> list[Move]:
|
||||
ret = []
|
||||
for move in candidates:
|
||||
board_after_move = board.make_move(move)
|
||||
if not board_after_move.is_check_for(self.colour):
|
||||
ret.append(move)
|
||||
return ret
|
||||
|
||||
def _look_direction(self, board: "Board", mult_dx: int, mult_dy: int):
|
||||
ret = []
|
||||
for d in range(1, 8):
|
||||
dx = mult_dx * d
|
||||
dy = mult_dy * d
|
||||
|
||||
move = self._move_for_position(board, self.pos.x + dx, self.pos.y + dy)
|
||||
if move is None:
|
||||
break
|
||||
ret.append(move)
|
||||
if move.is_capturing:
|
||||
break
|
||||
|
||||
return ret
|
||||
|
||||
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 Move(self, Position(x, y))
|
||||
|
||||
if piece.colour != self.colour:
|
||||
return Move(self, Position(x, y), is_capturing=True)
|
||||
return None
|
||||
|
||||
def position(self) -> Position:
|
||||
return self.pos
|
||||
|
||||
def move_to(self, pos: Position) -> "Piece":
|
||||
ret = type(self)(pos, self.colour)
|
||||
return ret
|
||||
|
||||
def legal_moves(self, board: "Board", / , looking_for_check = False) -> list["Move"]:
|
||||
raise NotImplementedError(f"Can't say what the legal moves are for {type(self).__name__}, the method hasn't been implemented yet")
|
Reference in New Issue
Block a user