Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: How do you represent chess boards in your chess programms

Author: Vincent Diepeveen

Date: 10:56:29 09/25/99

Go up one level in this thread


We should compare speeds.

What i do after 1.e4,e5 2.d4,d5 is
generate the move list a few million times (n times).
Then i divide the time by (n * #semi legal moves).

#nodes a second generated at a PII450 for diep is 15.5M

Haven't seen anyone faster so far, though most are not
reveiling their speed.

Note that if we have a merced within say 5 years that i
can implement bitboards for a few eval terms within a day by then.

No need for rotated bb of course as i keep my current generator
and makemove.

Majority of code is not faster using bitboards even at 64 bits
machine.



On September 24, 1999 at 10:22:09, Robert Hyatt wrote:

>On September 24, 1999 at 01:12:06, Christophe Theron wrote:
>
>>On September 23, 1999 at 23:12:48, Normand M. Blais wrote:
>>
>>>On September 23, 1999 at 22:44:01, leonid wrote:
>>>
>>>>On September 23, 1999 at 14:11:57, Normand M. Blais wrote:
>>>>
>>>>>On September 22, 1999 at 15:30:36, Brian Nielsen wrote:
>>>>>
>>>>>>
>>>>>>Hi
>>>>>>
>>>>>>My name is Brian, i was thinking about writing a chess engine for fun.
>>>>>>I am pretty experienced programmer/developper(c++,delpie), but have not been
>>>>>>programming games, thoug i have made a packman clone a couple years ago.
>>>>>>
>>>>>>I have done a little research myself to get the principles in making a chess
>>>>>>engine/program, and i think i now have basic understanding in how to(i hope :-))
>>>>>>
>>>>>>i am curious in how you chessgame programmers represent the chessboard, I have
>>>>>>seen 4-5 different examples/ways in how to do it, how do you do it and why ??
>>>>>>
>>>>>>Second how long time does it take to make a basic engine! from scratch
>>>>>>provided that i am a experienced programmer.
>>>>>>
>>>>>>Best regards
>>>>>>
>>>>>>Brian Nielsen
>>>>>
>>>>>
>>>>>Hi,
>>>>>
>>>>>I'm not using C/C++ (yet) but I thought I could share the idea that I use for
>>>>>my chess program. It is probably not new but I've nerver seen it mentionned any-
>>>>>where. It is easy to understand and to implement. So, just for the record, here
>>>>>it is.
>>>>>
>>>>>
>>>>>
>>>>>preliminary notes: The lower bound for array indexing is 1 (not 0) in the
>>>>>                   explanation below.
>>>>>
>>>>>1-  The board is represented by an array of 64 integers.
>>>>>
>>>>>
>>>>>
>>>>>             1  2  3  4  5  6  7  8  - 8
>>>>>	     9 10 11 12 13 14 15 16  - 7
>>>>>	    17 18 19 20 21 22 23 24  - 6
>>>>>	    25 26 27 28 29 30 31 32  - 5
>>>>>	    33 34 35 36 37 38 39 40  - 4
>>>>>	    41 42 43 44 45 46 47 48  - 3
>>>>>	    49 50 51 52 53 54 55 56  - 2
>>>>>	    57 58 59 60 61 62 63 64  - 1
>>>>>
>>>>>	     A  B  C  D  E  F  G  H
>>>>>
>>>>>
>>>>>2-  A 64 by 8 integer array is used for the piece movements. For each square,
>>>>>    8 directions is recorded:
>>>>>
>>>>>
>>>>>                       NW(8) N(1) NE(2)
>>>>>                           \  |  /
>>>>>                     W(7)---     ----E(3)
>>>>>         		   /  |  \
>>>>>		       SW(6) S(5) SE(4)
>>>>>
>>>>>    For a given square and a given direction, the index of the adjacent square
>>>>>    is stored. If there is no square (case of a border square), 0 is stored.
>>>>>
>>>>>    directions:   1  2  3  4  5  6  7  8
>>>>>    ---------------------------------------
>>>>>    square(1) =   0, 0, 2,10, 9, 0, 0, 0
>>>>>    square(2) =   0, 0, 3,11,10, 9, 1, 0
>>>>>    .
>>>>>    .
>>>>>    .
>>>>>    square(64) = 56, 0, 0, 0, 0, 0,63,55
>>>>>
>>>>>
>>>>>3-  The movement of the pieces are defined in term of directions:
>>>>>
>>>>>    Rook   --> 1 to 7 by 2
>>>>>    Bishop --> 2 to 8 by 2
>>>>>    Queen  --> 1 to 8 by 1
>>>>>    King   --> 1 to 8 by 1
>>>>>
>>>>>    Knight --> {1,1,2},{1,1,8},{3,3,2},{3,3,4},
>>>>>               {5,5,4},{5,5,6},{7,7,6},{7,7,8}
>>>>>    White:
>>>>>    pawn move one --> 1
>>>>>    pawn move two --> {1,1}
>>>>>    pawn captures --> 2,8
>>>>>
>>>>>    Black:
>>>>>    pawn move one --> 5
>>>>>    pawn move two --> {5,5}
>>>>>    pawn captures --> 4,6
>>>>>
>>>>>4-  Enhencements.
>>>>>
>>>>>    A 64 by 8 array can be generated for the knight where the squares stored
>>>>>    for a given direction is the end square of a knight move. Then the knight
>>>>>    movement can be defined this way:
>>>>>
>>>>>    Knight --> 1 to 8 by 1
>>>>>
>>>>>
>>>>>
>>>>>Best Regards,
>>>>>
>>>>>Normand M. Blais
>>>>
>>>>This is pretty  fascinating for me to find your description of the chess
>>>>board. It had nothing to do with mine. My question to you is: Do your
>>>>representation of the board is usual?
>>>>
>>>>Thanks,
>>>>Leonid.
>>>>boad represention is usual one or something
>>>
>>>The way I represent the chess board is not new. What's particular is the way I
>>>generate the moves using an intermediary array to represent directions. I was
>>>able to build a movegenerator in a short time. I compare it to TSCP move
>>>generator and it is as fast if not faster. I know that the bitboard is the way
>>>to go but I'm using an interpreted language that don't have 64bits unsigned
>>>integer data type. I'm programming for fun only.
>>>
>>>NMB
>>
>>If somebody tells you bitboards are the way to go, don't believe him.
>>
>>
>>    Christophe
>
>
>When IA64 is a reality, bitboards are the way to go.
>
>:)



This page took 0.01 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.