diff --git a/app/chess_sim/test.py b/app/chess_sim/test.py new file mode 100644 index 0000000..cc7721e --- /dev/null +++ b/app/chess_sim/test.py @@ -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():