initial data structure
This commit is contained in:
@@ -0,0 +1,85 @@
|
|||||||
|
from enum import Enum, auto
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
|
class PieceType(Enum):
|
||||||
|
PAWN = auto()
|
||||||
|
KNIGHT = auto()
|
||||||
|
BISHOP = auto()
|
||||||
|
ROOK = auto()
|
||||||
|
QUEEN = auto()
|
||||||
|
KING = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class Color(Enum):
|
||||||
|
WHITE = auto()
|
||||||
|
BLACK = auto()
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Piece:
|
||||||
|
type: PieceType
|
||||||
|
color: Color
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BoardPos:
|
||||||
|
p: tuple[int, int]
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BoardMove:
|
||||||
|
m_from: BoardPos
|
||||||
|
m_to: BoardPos
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BoardField:
|
||||||
|
piece: Optional[Piece] = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ChessBoard:
|
||||||
|
fields: list[list[BoardField]]
|
||||||
|
|
||||||
|
def place(self, row: int, col: int, piece_type: PieceType, color: Color):
|
||||||
|
self.fields[row][col].piece = Piece(piece_type, color)
|
||||||
|
|
||||||
|
# wir lieben python <3 :(
|
||||||
|
@classmethod
|
||||||
|
def init_default(cls) -> "ChessBoard":
|
||||||
|
brd = cls(
|
||||||
|
[[BoardField() for _ in range(8)] for _ in range(8)]
|
||||||
|
)
|
||||||
|
|
||||||
|
# place pawns
|
||||||
|
for col in range(8):
|
||||||
|
brd.place(1, col, PieceType.PAWN, Color.BLACK)
|
||||||
|
brd.place(6, col, PieceType.PAWN, Color.WHITE)
|
||||||
|
|
||||||
|
# back rank order
|
||||||
|
back_rank = [
|
||||||
|
PieceType.ROOK,
|
||||||
|
PieceType.KNIGHT,
|
||||||
|
PieceType.BISHOP,
|
||||||
|
PieceType.QUEEN,
|
||||||
|
PieceType.KING,
|
||||||
|
PieceType.BISHOP,
|
||||||
|
PieceType.KNIGHT,
|
||||||
|
PieceType.ROOK,
|
||||||
|
]
|
||||||
|
|
||||||
|
# place black back rank
|
||||||
|
for col, piece_type in enumerate(back_rank):
|
||||||
|
brd.place(0, col, piece_type, Color.BLACK)
|
||||||
|
|
||||||
|
# place white back rank
|
||||||
|
for col, piece_type in enumerate(back_rank):
|
||||||
|
brd.place(7, col, piece_type, Color.WHITE)
|
||||||
|
|
||||||
|
return brd
|
||||||
|
|
||||||
|
|
||||||
|
def possible_moves(self) -> list[BoardMove]:
|
||||||
|
return []
|
||||||
|
|
||||||
|
# used only for testing purposes
|
||||||
|
def main():
|
||||||
Reference in New Issue
Block a user