Bonjour !

J'ai mis la main sur une version en Pascal du programme d'échecs TSCP (Tom Kerrigan's Simple Chess Program). Au cas où cela intéresserait quelqu'un, voici le lien vers cette version en Pascal : TSCPPAS.ZIP

Il y a un endroit du programme que je ne comprends pas trop.

Voici la déclaration du type TCastlePermissions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
type
  TCastlePermission = (AllowWhiteKingSide, AllowWhiteQueenSide, AllowBlackKingSide, AllowBlackQueenside);
  TCastlePermissions = set of TCastlePermission;
Voici la constante castle_mask :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
  castle_mask: array[0..63] of byte = (
     7, 15, 15, 15,  3, 15, 15, 11,
    15, 15, 15, 15, 15, 15, 15, 15,
    15, 15, 15, 15, 15, 15, 15, 15,
    15, 15, 15, 15, 15, 15, 15, 15,
    15, 15, 15, 15, 15, 15, 15, 15,
    15, 15, 15, 15, 15, 15, 15, 15,
    15, 15, 15, 15, 15, 15, 15, 15,
    13, 15, 15, 15, 12, 15, 15, 14
    );
Maintenant, on a une variable castle de type TCastlePermissions, dont la valeur est modifiée de la façon suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
castle := castle - TCastlePermissions(castle_mask[m.from]) - TCastlePermissions(castle_mask[m.ToNdx]);
Ce que je comprends pas, c'est le rapport qu'il y a entre une valeur de type Byte et une valeur de type set of TCastlePermission.

Il est à noter que le code se compile sans problème avec Delphi 7 et avec Virtual Pascal. En revanche Free Pascal le refuse :

board.pas(595,22) Error: Illegal type conversion: "Byte" to "TCastlePermissions"
board.pas(595,64) Error: Illegal type conversion: "Byte" to "TCastlePermissions"
Pourriez-vous m'éclairer un peu (et éventuellement me donner une solution pour pouvoir compiler avec Free Pascal) ?