This repository has been archived on 2026-03-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cau-praktikum/app/chess_sim/test.py
T
2026-02-24 17:55:02 +01:00

97 lines
2.1 KiB
Python

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 BoardPos:
p: tuple[int, int]
@dataclass
class Piece:
type: PieceType
color: Color
@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]:
moves: list[BoardMove] = []
for i, row in enumerate(self.fields):
for j, field in enumerate(row):
print(f"Row: {i}, Column: {j}, field: {field}")
return moves
# used only for testing purposes
def main():
default_brd = ChessBoard.init_default()
default_brd.possible_moves()
main()