⚠️ Warning: This is a draft ⚠️

This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.

If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.

{{draft task|Program options and user interface}} 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: #Allow player to choose colour #Validate user-entered moves #Show updated board position after each move #Detect and show Checkmate and Stalemate

Advanced implementation: #Time controls #Detect drawn positions #Chess engine interface: UCI, CECP or XBoard #Use an opening book #Show principal variation during search #Computer thinking on opponent's time #Save and replay games in a standard format #Analyze positions, eg mate-in-N