Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Storing a chess move

Author: Reinhard Scharnagl

Date: 03:24:53 12/25/03

Go up one level in this thread


On December 25, 2003 at 02:33:00, Russell Reagan wrote:

>This is a question mainly directed at chess programmers. Why do some of you
>store a chess move as a structure, and others of you store it as a packed int?
>Crafty stores them as a packed int, while many others use a struct.
>
>An example of the packed int approach is:
>
>typedef int Move;
>Move m = from_square | (to_square << 6) | (move_flags << 12);
>
>Pros: Handling of a move as a whole entity is fast (i.e. copying, sorting, etc.)
>Cons: Accessing fields of a move and packing the move requires some overhead
>
>An example of the struct approach is:
>
>struct Move
>{
>    int      from;
>    int      to;
>    unsigned flags;
>};
>
>Move m;
>m.from  = from_square;
>m.to    = to_square;
>m.flags = move_flags;
>
[...]

Hi, my approach is: (commented in german language)

  // bestimmte Spezialzug-Kodes
  enum eZugTyp {
    eFigIndex     = 0x0F,
    eSpezEpSchlag = 0x10,
    eSpezRochade  = 0x20,
    eSpezWandlung = 0x40,
    eSpezial      = eSpezEpSchlag | eSpezRochade | eSpezWandlung,
    eSchlagzug    = 0x80,
  };

  // kodierter Spielzug
  union TZug {
    struct TZugBytes {
      // bewegter Figurtyp mit Flags
      unsigned char   Typ;
      // Quellfeld-Koordinate
      unsigned char   Her;
      // Zielfeld-Koordinate
      unsigned char   Hin;
      // Schachrichtung, Doppelschach oder Zero
      char            Dir;
    } B;
    // gesamter Zugriff
    int              Voll;
  };

Regards, Reinhard.



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.