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)))
);
);
)
)
)