Compare commits

...

2 Commits

Author SHA1 Message Date
Karma Riuk
8f156616f0 pawns have their legal move list
Some checks failed
pre-release / Pre Release (push) Waiting to run
tagged-release / Tagged Release (push) Has been cancelled
2025-01-29 12:08:03 +01:00
Karma Riuk
a2ebb314eb pieces now know if they are white or black 2025-01-29 12:07:26 +01:00
3 changed files with 48 additions and 9 deletions

View File

@ -16,8 +16,8 @@ class Board:
pos_w_pawn = Position(x, 1)
pos_b_pawn = Position(x, 6)
self._white[pos_w_pawn] = Pawn(pos_w_pawn)
self._black[pos_b_pawn] = Pawn(pos_b_pawn)
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)
@ -34,9 +34,19 @@ class Board:
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)
self._black[pos_b_piece] = piece(pos_b_piece)
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()

View File

@ -1,7 +1,31 @@
from .piece import Piece
from logic.position import Position
from logic.pieces.piece import Piece
class Pawn(Piece):
def __init__(self, pos) -> None:
super().__init__(pos)
self.already_moved = False
def legal_moves(self, board) -> list[Position]:
ret = []
# can we capture to the left?
if self.pos.x > 0 and (
(self.colour == self.WHITE and (capturable_piece := board.piece_at(self.pos.x - 1, self.pos.y + 1)))
or
(self.colour == self.BLACK and (capturable_piece := board.piece_at(self.pos.x - 1, self.pos.y - 1)))
):
if capturable_piece.colour != self.colour:
ret.append(capturable_piece.pos)
# can we capture to the right?
if self.pos.x < 7 and (
(self.colour == self.WHITE and (capturable_piece := board.piece_at(self.pos.x + 1, self.pos.y + 1)))
or
(self.colour == self.BLACK and (capturable_piece := board.piece_at(self.pos.x + 1, self.pos.y - 1)))
):
if capturable_piece.colour != self.colour:
ret.append(capturable_piece.pos)
for dy in range(1, 3 if self.pos.y == 1 else 2):
if self.pos.y + dy > 7 or board.piece_at(self.pos.x, self.pos.y + dy):
break
ret.append(Position(self.pos.x, self.pos.y + dy))
return ret

View File

@ -2,8 +2,13 @@ from logic.position import Position
class Piece:
def __init__(self, pos) -> None:
WHITE = 0
BLACK = 1
def __init__(self, pos, colour) -> None:
self.pos = pos
assert colour == self.WHITE or colour == self.BLACK, "The colour of the piece must be either Piece.WHITE or Piece.BLACK"
self.colour = colour
def position(self) -> Position:
return self.pos