53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
from logic.pieces.bishop import Bishop
|
|
from logic.pieces.king import King
|
|
from logic.pieces.knight import Knight
|
|
from logic.pieces.queen import Queen
|
|
from logic.pieces.rook import Rook
|
|
from logic.pieces.pawn import Pawn
|
|
from logic.pieces.piece import Piece
|
|
from logic.position import Position
|
|
|
|
class Board:
|
|
def __init__(self) -> None:
|
|
self._white: dict[Position, Piece] = {}
|
|
self._black: dict[Position, Piece] = {}
|
|
|
|
for x in range(8):
|
|
pos_w_pawn = Position(x, 1)
|
|
pos_b_pawn = Position(x, 6)
|
|
|
|
self._white[pos_w_pawn] = Pawn(pos_w_pawn, Piece.WHITE)
|
|
self._black[pos_b_pawn] = Pawn(pos_b_pawn, Piece.BLACK)
|
|
|
|
pos_w_piece = Position(x, 0)
|
|
pos_b_piece = Position(x, 7)
|
|
|
|
piece = None
|
|
if x == 0 or x == 7:
|
|
piece = Rook
|
|
elif x == 1 or x == 6:
|
|
piece = Knight
|
|
elif x == 2 or x == 5:
|
|
piece = Bishop
|
|
elif x == 3:
|
|
piece = Queen
|
|
elif x == 4:
|
|
piece = King
|
|
assert piece != None, f"Didn't know which piece to assign for {x = }"
|
|
self._white[pos_w_piece] = piece(pos_w_piece, Piece.WHITE)
|
|
self._black[pos_b_piece] = piece(pos_b_piece, Piece.BLACK)
|
|
|
|
def piece_at(self, x: int, y: int) -> Piece | None:
|
|
pos = Position(x, y)
|
|
white_piece = self._white.get(pos, None)
|
|
black_piece = self._black.get(pos, None)
|
|
|
|
assert white_piece == None or black_piece == None, f"There are two pieces at the same position {pos}, this shouldn't happen!"
|
|
|
|
if white_piece != None:
|
|
return white_piece
|
|
return black_piece
|
|
|
|
def create_board():
|
|
return Board()
|