Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Creating your own chess program

Author: Bob Green

Date: 15:08:12 09/09/01

Go up one level in this thread


I agree with the others who have posted - it **is** addictive and it **does**
take some time.

I would add the following link as both having a lot of good information and
linking to even more:

http://www.xs4all.nl/~verhelst/chess/programming.html

One of the links missing from this is the following page titled "Build a
Grandmaster one Step At A Time":

http://www.xs4all.nl/~verhelst/chess/programming.html

I am going to quote verbatim from this site, which provided me a fine way of
both structuring my work and making sure I didn't "miss" anything:

   1 Display the board and some skeletal menus.
   2 Create the data structure to represent the position.
   3 Write all the piece drawing routines.
   4 Initialize and display the board.
   5 Write the Make and Unmake functions.
   6 Devise and implement a method for the user to move the pieces (i.e.
click-point-click).
   7 Add legality checking to ensure the user's moves are legal.
   8 Add the basic options Takeback and Newgame.
   9 Write some debugging tools.
  10 Write one or more move generation routines. Some possibilities -
       GenerateCaptures,
       GenerateNonCaptures,
       GenerateEscapes.
  11 Add a user option to display possible moves. It'll help debug those move
generation routines you just wrote!
  12 Add end-of-game tests. These include checkmate, stalemate, draw-by-rep,
draw by lack of mating material, draw by the fifty move rule. Test after every
"over the board" move.
  13 Implement the computer player using just the root move list. At this point,
the computer isn't searching - it's just making any ole' move.
  14 Add the movelist (moves that have been played over-the-board) to the
display in short algebraic notation.
  15 Take some time to finish your GUI.
  16 Implement the evaluator. Score only material imbalances for now.
  17 Implement a full-width search function.
  18 Devise some method of move ordering.
  19 Write a static exchange evaluator (SEE) to aid with move ordering.
  20 Display the principal continuation (for each depth) to the screen.
  21 Implement timing. Display clocks to the screen.
  22 Add search data to the display (depth, nodes, nps, evals, score ...)
  23 Write code to run test suites.
  24 Write all kinds of tools for evaluating data from test suites.
  25 Do some low level tuning before adding many heuristics.
  26 Implement separate search functions for root position and the quiescence
stage.
  27 Add heuristics to the searchengine - hashing, null move, main var search,
pvs, killers, history,extensions. Continually test your performance with some
tactical test suite, like "Win At Chess."
  28 Enhance the evaluator's knowledge.
  29 Spend time tweaking with more positional test suites.
  30 Add a save/load feature following the PGN standard.
  31 Develop an opening book.
  32 Add pondering. This means the engine "thinks" on the opponent's time.
  33 Add support for endgame tablebases.
  34 Write an ICS interface (allows internet play on a chess server).
  35 Experiment with learning algorithms.
  36 Add Auto232 - interfaces programs via serial port.

Best regards,

Bob Green



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.