Skip to content

Chess / Tic-Tac-Toe Engine — Detailed#

classDiagram
  direction TB

  class Game {
    -board: Board
    -players: List~Player~
    -turn: Color
    -history: List~Move~
    -status: GameStatus
    +makeMove(m)
    +undo()
    +status()
  }

  class Board {
    -squares: Map Pos -> Square
    +get(pos)
    +set(pos, piece)
    +copy() Board
  }

  class Square {
    -pos
    -piece
  }

  class Piece {
    <<abstract>>
    -color
    +legalMoves(board, pos) List~Move~
  }
  class King
  class Queen
  class Rook
  class Bishop
  class Knight
  class Pawn

  class Move {
    +from
    +to
    +piece
    +captured
    +promote
    +special: SpecialMove
  }
  class SpecialMove {
    <<enumeration>>
    NONE
    EN_PASSANT
    CASTLING
    PROMOTION
  }

  class Rules {
    +isLegal(m, game) bool
    +inCheck(c, board) bool
    +checkmate(game) bool
    +stalemate(game) bool
    +threefoldRepetition(game) bool
    +fiftyMoveRule(game) bool
  }

  class GameStatus {
    <<enumeration>>
    ACTIVE
    CHECK
    CHECKMATE
    STALEMATE
    DRAW
  }

  class Player {
    +name
    +color
    +rating
  }

  class AIPlayer
  class HumanPlayer
  class TimeControl

  Game *-- Board
  Game *-- "many" Player
  Game --> Rules
  Game --> GameStatus
  Board *-- "many" Square
  Square o-- Piece
  Piece <|-- King
  Piece <|-- Queen
  Piece <|-- Rook
  Piece <|-- Bishop
  Piece <|-- Knight
  Piece <|-- Pawn
  Player <|-- AIPlayer
  Player <|-- HumanPlayer
  Game --> Move
  Move --> SpecialMove
  Game --> TimeControl

Glossary & fundamentals#

Concept What it is Fundamentals
State machine game status mvcc-isolation-levels
Idempotency networked move replay idempotency-retries
Pub/Sub move event broadcast pub-sub-pattern