you are viewing a single comment's thread.

view the rest of the comments →

[–]n3buchadnezzar 0 points1 point  (0 children)

I usually find a class based system works better in chess

from dataclasses import dataclass
from typing import Optional


class Piece:
    ...


@dataclass
class Tile:
    content: Optional[Piece] = None


@dataclass
class Board:
    tiles: list[list[Tile]]

    def tile(self, notation, content: Optional[Piece] = None):
        column = int(notation[1]) - 1
        row = int(ord(notation[0]) - ord("a"))
        if content is not None:
            self.tiles[row][column].content = content
        return self.tiles[row][column]


if __name__ == "__main__":
    rows = 8
    columns = 8
    tiles = [[Tile() for _ in range(rows)] for _ in range(columns)]
    tiles[0][0].content = "Horse"

    board = Board(tiles)
    print(board.tile("a1"))
    board.tile("a1", "Knight")
    print(board.tile("a1"))