2009-05-06 7 views
3

voulez-vous créer 3 liste (de coordonnées) pourque feriez-vous dans un échiquier? (Position de pièce)

  • position vide
  • position noire
  • position blanc

ou tout simplement en boucle si le tableau en cas de besoin et le jeu avec le résultat à chaque fois?

quoi de mieux? (vitesse sage)

+0

dupe de http://stackoverflow.com/questions/39874/how-do-i-model-a-chessboard -when-programmation-a-computer-to-play-chess –

+0

@neil, je viens de regarder ce n'est pas un dupe .. le mien est une question spécifique et cette question vous lié ne répond pas – Fredou

Répondre

7

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

Si la vitesse est votre priorité, vous devez utiliser un type de données 64 bits pour chaque ensemble de pièces sur le tableau (par exemple, pions blancs, reines noires, pions en passant). Vous pouvez ensuite tirer parti des opérations au niveau du bit natif lorsque vous générez des mouvements et tester la légalité des déplacements.

Si la clarté du code est prioritaire, alors oubliez les bits mélangés et optez pour des types de données bien abstraits comme d'autres l'ont déjà suggéré. Rappelez-vous juste que si vous allez de cette façon, vous atteindrez probablement un plafond de performance. Pour commencer, regardez le code pour Crafty (C) et SharpChess (C#).

(Posté here)

+0

J'ai quelque chose de similaire à sharpchess – Fredou

+0

Avec les ordinateurs modernes, êtes-vous susceptible de rencontrer des retards notables avec une implémentation raisonnable? –

+0

@John - les plus petites différences de vitesse sont significatives quand une routine est appelée des milliards de fois. Il ne s'agit pas seulement de la perception de l'utilisateur à l'interface graphique. –

2

Qu'est-ce que vous cherchez est une représentation du conseil d'administration . Le Chess Programming Wiki a une section très détaillée sur le sujet (vaut vraiment la peine d'être lu si vous êtes sérieux au sujet de l'écriture d'une IA), tandis que Wikipedia offre un bon aperçu sur le sujet. Il est important d'être très attentif lors du choix de la représentation de la carte appropriée - ils offrent tous leurs propres avantages (et pièges) - en grande partie à la vitesse/exécution de certaines opérations telles que l'exécution de mouvements et l'évaluation de l'état de la carte allant de O (1) à O (n) complexité du temps selon la méthode et la tâche). Pour autant que je sache, il n'y a toujours pas de consensus sur la "meilleure" représentation du conseil d'administration, bien que certains soient généralement préférés aux autres aujourd'hui (bitboards sont presque un must-have par exemple). C'est pourquoi il est courant pour les IA les plus fortes d'utiliser plusieurs représentations (jusqu'à 4 ou 5 paires) différentes lors de la recherche de mouvements.

0

je suggère une série de 64 articles tels que:

byte [64] Squares; 

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

Lorsque vous traitez un seul index pour référencer les positions de l'échiquier, il y a certaines choses que vous devez savoir pour vous faciliter la vie. Par exemple, comment savez-vous que deux positions sont sur la même ligne ou la même colonne? Il y a un truc facile à comprendre.

Row

Pour déterminer le rang d'une position on divise par la position 8 et de prendre la partie entière du résultat. Par exemple, la position 63 divisée par 8 est 7.875 ce qui est égal à la ligne 7. La position 3 divisée par 8 est 0.375 donc 0.En C# par coulée à un nombre entier vous obtiendrez toujours juste la partie entière du nombre, d'où:

Row = (int)(position/8) 

Colonne

Pour comprendre la colonne d'une position que vous utilisez l'opérateur de module en effectuant module de position 8. par exemple la position 24 module 8 est la colonne 0. Position 15 module 8 est 7, donc

Column = position % 8 

armé de ces deux concepts que nous pouvons convertir une position sur notre plateau carré 64 à une colonne et la ligne .

Si vous souhaitez en savoir plus sur la création de votre propre moteur d'échecs ont un oeil à http://www.chessbin.com