106 votes

Quelle est la signification de l’initialisation des tableaux de direction inférieur avec valeurs donnée lors de l’élaboration de programme d’échecs ?

Je suis nouveau à la programmation concurrentielle, et j’ai remarqué souvent, beaucoup des grandes codeurs ont ces quatre lignes dans leur code (en particulier celles impliquant des tableaux) :

Que cela signifie vraiment et ce qui est la technique utilisée pour ?

84voto

Patashu Points 14053

C'est une technique d'encoder toutes les directions sous la forme de tableaux - chaque paire de di[i],dj[i] est une direction différente.

Si nous nous imaginons que nous avons une pièce à un endroit x,y, et nous voulons ajouter sur son x et sa valeur y de le déplacer vers un emplacement situé à proximité, 1,0 pour l'est, -1,0 est à l'ouest, 0,1 sud, 0,-1 est au nord et ainsi de suite.

(Ici, je l'ai dit en haut à gauche est de 0,0 et en bas à droite est de 4,4 et montré ce que le déplacement de chaque index des tableaux fera à partir du point central, X, à 2,2.)

.....
.536.
.1X0.
.724.
.....

La façon dont il est mis en place, si vous n' ^1 (^ étant XOR au niveau du bit) sur l'index, vous obtenez la direction opposée - 0 et 1 sont opposés, 2 et 3 sont opposés et ainsi de suite. (Une autre façon de le configurer, c'est aller dans le sens horaire en commençant au nord - ensuite, ^4 vous obtient le sens inverse.)

Maintenant, vous pouvez tester toutes les directions à partir d'un point donné par boucler sur votre di et dj tableaux, au lieu de devoir écrire chaque direction sur sa propre ligne (huit au total!) (Il suffit de ne pas oublier de faire la vérification des limites :) )

diK et djK formulaire de tous les chevaliers des directions au lieu de toutes les directions adjacentes. Ici, ^1 va retourner le long d'un axe, ^4 donnera à l'opposé du chevalier de sauter le pas.

.7.6.
0...5
..K..
1...4
.2.3.

64voto

James Holderness Points 15849

Pour ceux qui éprouvent des Patashu l'explication est difficile à suivre, je vais tenter de clarifier.

Imaginez que vous essayez de considérer tous les coups possibles à partir d'un point donné sur un échiquier.

Si vous en boucle sur la di et dj tableaux, l'interprétation de la di valeurs de x les compensations et le dj valeurs de y décalages, vous couvrir chacune des 8 directions possibles.

En supposant que positif x est positif et y est sud (comme dans Patashu la réponse de), vous obtenez le résultat suivant;

 | di/x | dj/y | Direction
--+------+------+-----------
0 | 1 | 0 | à l'est
1 | -1 | 0 | ouest
2 | 0 | 1 | sud 
3 | 0 | -1 | nord
4 | 1 | 1 | sud-est
5 | -1 | -1 | nord-ouest
6 | 1 | -1 | nord-est
7 | -1 | 1 | sud-ouest

Le diK et djK les tableaux peuvent être interprétées de la même manière à établir les coups possibles pour le Chevalier de la pièce. Si vous n'êtes pas familier avec les échecs, le cavalier se déplace en L modèle de deux cases dans une direction, puis d'une case à angle droit par rapport à celui (ou vice versa).

 | diK/x | djK/y | Direction
--+-------+-------+----------------
0 | -2 | -1 | 2 à l'ouest, 1 nord
1 | -2 | 1 | 2 à l'ouest, 1 sud
2 | -1 | 2 | 1 à l'ouest, 2 sud
3 | 1 | 2 | 1 à l'est, 2 sud
4 | 2 | 1 | 2 à l'est, 1 sud
5 | 2 | -1 | 2 à l'est, 1 nord
6 | 1 | -2 | 1 à l'est, 2 nord
7 | -1 | -2 | 1 à l'ouest, de 2 au nord

1voto

Dariusz Points 8058

Un petit extrait de code pour vérifier la quantité de mouvements possible dans toutes les directions, qui utilise les baies définies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X