En ligne
Nous avons 3 invités en ligne

Le générateur de coups - Les pièces glissantes

Index de l'article
Le générateur de coups
Les bitboards
Les pièces glissantes
Toutes les pages
Les pièces glissantes

Nous allons sauter les cavaliers et le roi car ils sont trivial à implanter car ce sont des pièces qui ne glissent pas. Nous allons passer directement aux pièces qui glissent. Les pièces qui glissent sont plus difficile à implanter car le nombre de coups possibles dépend des pièces dans le chemin.

Nous pourrions toujours utiliser une petite boucle mais alors l'utilisation des bitboards deviendrait moins utile.

Pour commencer, nous avons besoin d'une autre liste de bitboards pour indiquer les cases attaquées par la tour pour toutes les positions possibles sur l'échiquier de cette tour. Ces bitboards pourrons aussi servir pour la dame car elle peut aussi glisser dans les mêmes directions de la tour.

Nous avons besoins d'une liste de bitboards pour toutes les directions que la tour peu prendre. Les directions de notre tour avec la notation que nous avons étudiez dans la représention de l'échiquier sont 1, 8, -1 et -8.

Appellons les alors plus1[64], plus8[64], moins1[64], moins8[64].

Un exemple, supponsons que nous avons une tour en A1. Nous voulons connaître toutes les cases attaquées vers la droite. Nous prenons alors le bitboard plus1[A1].

Ça nous donne le bitboard suivant:

- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- x x x x x x x

La plupart du temps, y a des pièces rencontrées. Supposons alors qu'il y a une pièce en A4.

Nous devons exclure les cases A5, A6, A7, A8 et nous voulons le faire sans boucle biensûr.

C'est en réalité assez simple.

Vous prenez le même bitboard plus1 mais pour la case A4 qui nous donne le bitboard suivant:

- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - x x x x
- - - - - - - -

Vous faites alors un ou exclusif et le résultat sera le suivant:

- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- x x x - - - -

Ce qui donne les cases A2, A3, A4.

Il suffit alors de déterminer si la case A4 est valide ou non selon si vous êtes entrain de générer des attaques et si c'est une pièces adverse.

Ensuite, vous faites la même chose pour les 3 autres directions en prenant les listes de bitboards plus8, moins1 et moins8. Le principe est le même pour les diagonales des fous. Vous générez les bitboards plus7, moins7, plus9, moins9.

Premier et dernier bit

Il y a deux fonctions dont vous allez avoir besoin. Ce sont les fonctions pour trouver le premier bit et le dernier bit à partir d'une position donnée.

Pour trouver la pièce rencontrer en A4 dans l'exemple plus haut, nous nous faisons un ET logique avec le bitboard des pièces sur l'échiquier et cela nous donne un bitboard avec le bit A4 à 1. Mais il nous faut le convertir en position de 0 à 63. Pour ça, nous utilisons une fonctionne qui retourne le premier bit ou le dernier bit. Cela dépend de l'architecture de votre ordinateur, Big indian ou little indian. La technique que j'emploie dans mon propre moteur consiste à générer un index pour chaque valeur sur 16 bits et le premier bit correspondant. Ça évite d'utiliser une boucle pour le calcul. Il suffit de diviser le mot en 4 parties de 16 bits et ensuite ramener la valeur indexée sur 16 bits.

 

J'espère que ce tutoriel vous aidera si l'envie vous prend de programmer un jeu d'échecs en utilisant les bitboards.

Si vous pensez qu'il y a des parties qui ne sont pas claires dans mon tutoriel et qui méritent d'être revues, laisser moi un commentaire et j'essaierai de corriger ça.

 



Mis à jour (Lundi, 19 Octobre 2009 17:29)