Chess

The source code listing below is a partial implementation of a computer chess game.

 

Source Code

 (class (public) Chess-form extends Form

  var (auto) (

    Game-server game-server;

    Board-grid board-grid;

    ...

  )

  var (private) (

    Game-state game-state;

    ...

  )

  (proc (auto) board-grid_change (Event e)

    do (

      : game-state (set-board (: e row) (: e col) (: e intval));

    )

  )

  (proc (auto) game-server_auto-move (Event e)

    var (

      Move-generator mg (new Move-generator game-state);

      Move-implementer mi (new Move-implementer game-state);

    )

    do (

      : mi do-move (: mg get-move);

    )

  )

  ...

)

(class Game-state

  var (private) (

    array 2 int board (new int 8 8);

    boolean white;

    boolean check;

    boolean en-passant;

    int en-passant-col;

    Player-state white-player;

    Player-state black-player;

  )

  (func (public) int get-board (int row; int col)

    do (

      return (board row col);

    )

  )

  (proc (public) set-board (int row; int col; int val)

    do (

      = (board row col) val;

    )

  )

  (func (public) Player-state get-player (boolean white)

    do (

      if white then (

        return white-player;

      )

      else (

        return black-player;

      );

    )

  )

  (proc (public) set-player

    (Player-state player; boolean white)

    do (

      if white then (

        = white-player player;

      )

      else (

        = black-player player;

      );

    )

  )

)

(class Player-state

  var (private) (

    boolean castle-king-side;

    boolean castle-queen-side;

  )

  (func (public) boolean is-castle-king-side do (

    return castle-king-side;

  ))

  (proc (public) set-castle-king-side (boolean val) do (

    = castle-king-side val;

  ))

  (func (public) boolean is-castle-queen-side do (

    return castle-queen-side;

  ))

  (proc (public) set-castle-queen-side (boolean val) do (

    = castle-queen-side val;

  ))

)

(class Move

  var (private) (

    int source-row;

    int source-col;

    int dest-row;

    int dest-col;

    boolean castling;

    boolean en-passant-capture;

    boolean queened-pawn;

  )

  (func (public) int get-source-row do (

    return source-row;

  ))

  (func (public) int get-source-col do (

    return source-col;

  ))

  (func (public) int get-dest-row do (

    return dest-row;

  ))

  (func (public) int get-dest-col do (

    return dest-col;

  ))

  ...

)

(class Move-generator

  var (private) (

    Game-state game-state;

  )

  (cons Move-generator (Game-state gs)

    do (

      = game-state gs;

    )

  )

  (func (public) Move get-move

    var (private) (

      Move best-move;

    )

    do (

      { calculate optimum move }

      ...

      return best-move;

    )

  )

)

(class Move-implementer

  var (private) (

    Game-state game-state;

  )

  (cons Move-implementer (Game-state gs)

    do (

      = game-state gs;

    )

  )

  (proc (public) do-move (Move move)

    do (

      { handle special cases... }

      if (== move nil) then (

        { check mate }

      )

      elseif (move is-castling) then (

        { computer is castling }

      )

      elseif (move is-en-passant-capture) then (

        { must remove captured pawn }

      )

      elseif (move is-queened-pawn) then (

        { promote pawn to queen }

      )

      else (               { normal case }

        : board-grid (auto-drop

          (: move get-dest-row)(: move get-dest-col)

          (: board-grid (auto-drag

          (: move get-source-row)(: move get-source-col)))

        );

      );

    )

  )

)