Computer Chess Club Archives


Search

Terms

Messages

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

Author: Hristo

Date: 14:37:41 09/24/99

Go up one level in this thread


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

Hi Normans.
I've been using similar approach for some time now!
It's *funny* to see how close our ideas are ...
The diference is that I use direction[8][8]*64 matrix.
and the directions are not predefined. There is a maximum
of 8 directions and the maximum length a piece can go is 7
squares. i.e. square(x).direction(1).vector(...) = square number
includes all possible squares that a given piece
can reach from a given square(x) in direction(1).
vector(n) is the square number and it doesn't have to adjacent to the
origin square.
Use vector(n)=0 as terminator and then go to the next direction.
If direction(n)=0 there are no more valid directions.
Knight moves are considerd in the same way as everything else, just their
vectors have only one entry ...
Single, very simple function, is used to generate almost all moves ...
the pawns are a bit tricky, but not too bad.


regards.
hristo










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.