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():