Chess player/Program options and user interface

From Rosetta Code

This is a sub-task of the Chess player task.

Using previously created Chess player/Move generation and Chess player/Search and evaluation components, write a driver or main loop which will allow a user to play a game against the computer. This can use either a simple ASCII command-line interface or a more elaborate graphical interface. Implement the basic features given below, and optionally some of the more advanced ones

Basic implementation:

  1. Allow player to choose colour
  2. Validate user-entered moves
  3. Show updated board position after each move
  4. Detect and show Checkmate and Stalemate

Advanced implementation:

  1. Time controls
  2. Detect drawn positions
  3. Chess engine interface: UCI, CECP or XBoard
  4. Use an opening book
  5. Show principal variation during search
  6. Computer thinking on opponent's time
  7. Save and replay games in a standard format
  8. Analyze positions, eg mate-in-N