Question

créeriez-vous 3 listes (de coordonnées) pour

  • position vide
  • position noire
  • position blanche

ou simplement parcourir le tableau en cas de besoin et jouer avec le résultat à chaque fois?

Quel serait le meilleur? (vitesse)

Était-ce utile?

La solution

Vos deux choix principaux sont entre la rapidité et la clarté du code.

Si la vitesse est votre priorité, vous devez utiliser un type de données 64 bits pour chaque ensemble d'éléments du tableau (par exemple, des pions blancs, des reines noires, des pions en passant). Vous pouvez ensuite tirer parti des opérations natives au niveau du bit lors de la génération et du test de la légalité des déplacements.

Si la clarté du code est une priorité, alors oubliez le brassage de bits et optez pour des types de données bien abstraits comme ceux déjà suggérés. Rappelez-vous simplement que si vous allez dans cette direction, vous atteindrez probablement un plafond de performances.

Pour commencer, examinez le code correspondant à Crafty (C) et SharpChess (C #).

(Initialement posté ici )

Autres conseils

Vous recherchez une représentation du conseil d'administration . Le Wiki sur la programmation des échecs contient une section très détaillée sur le sujet (à lire absolument si vous ' Si vous envisagez sérieusement d’écrire une IA), Wikipedia offre une bonne vue d'ensemble sur le sujet. .

Il est important d’être très réfléchi lors du choix de la représentation appropriée du conseil - ils offrent tous des avantages uniques (et des pièges) - principalement en ce qui concerne la rapidité / la réalisation de certaines opérations, telles que les déplacements et l’évaluation de l’état du conseil (généralement complexité temporelle de O (1) à O (n) en fonction de la méthode et de la tâche). Pour autant que je sache, il n'y a toujours pas de consensus sur le "meilleur" représentation au conseil d'administration, bien que certains soient généralement préférés aux autres (les bitboards sont presque indispensables, par exemple) . C’est pourquoi il est courant que la plupart des IA d’échecs puissants utilisent plusieurs représentations de carte différentes (jusqu’à 4 ou même 5) lors de la recherche de mouvements.

Je suggérerais un tableau de 64 éléments tels que:

byte [64] Squares;

De cette façon, il vous suffit de représenter une position d'échiquier par un seul octet, c'est beaucoup plus rapide.

Lorsque vous utilisez un index unique pour référencer des positions sur un échiquier, vous devez savoir certaines choses pour vous rendre la vie plus facile. Par exemple, comment savez-vous que deux positions se trouvent toutes les deux sur la même ligne ou la même colonne? Il y a une astuce facile à comprendre.

Ligne

Pour déterminer la ligne d'une position, divisez la position par 8 et prenez la partie entière du résultat. Par exemple, la position 63 divisée par 8 correspond à 7,875, ce qui correspond à la ligne 7. La position 3 divisée par 8 correspond à 0,375, ainsi à 0. Dans C #, vous obtiendrez toujours uniquement la partie entière du nombre, par conséquent:

Row = (int)(position / 8)

Colonne

Pour déterminer la colonne d'une position, utilisez l'opérateur de module en effectuant le module de position 8. Par exemple, le module de position 24 est la colonne 0. Le module de position 15 est 7, d'où

Column = position % 8

Forts de ces deux concepts, nous pouvons convertir n’importe quelle position de notre tableau carré 64 en colonne et en ligne.

Si vous souhaitez en savoir plus sur la création de votre propre moteur d’échecs, consultez http: //www.chessbin. com

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top