Compare commits

..

No commits in common. "8f156616f0a59f07d5fdfbc19ed9fdb672da9056" and "2363b394846dc0255a0967673581c26d4bb68432" have entirely different histories.

3 changed files with 9 additions and 48 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, Piece.WHITE)
self._black[pos_b_pawn] = Pawn(pos_b_pawn, Piece.BLACK)
self._white[pos_w_pawn] = Pawn(pos_w_pawn)
self._black[pos_b_pawn] = Pawn(pos_b_pawn)
pos_w_piece = Position(x, 0)
pos_b_piece = Position(x, 7)
@ -34,19 +34,9 @@ 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, Piece.WHITE)
self._black[pos_b_piece] = piece(pos_b_piece, Piece.BLACK)
self._white[pos_w_piece] = piece(pos_w_piece)
self._black[pos_b_piece] = piece(pos_b_piece)
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,31 +1,7 @@
from logic.position import Position
from logic.pieces.piece import Piece
from .piece import Piece
class Pawn(Piece):
def legal_moves(self, board) -> list[Position]:
ret = []
def __init__(self, pos) -> None:
super().__init__(pos)
self.already_moved = False
# 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,13 +2,8 @@ from logic.position import Position
class Piece:
WHITE = 0
BLACK = 1
def __init__(self, pos, colour) -> None:
def __init__(self, pos) -> 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