Quelqu'un sait-il s'il existe une fonction de validation des échecs de python libres disponibles quelque part? P>
Qu'est-ce dont j'ai besoin. J'ai un diagramme stocké comme une chaîne et déplacez le candidat. Ce dont j'ai besoin, c'est voir si le candidat à déplacement est valide pour le diagramme. p>
serait vraiment intéressé à voir des exemples, si possible. p>
La chaîne semble de cette façon: p>
EMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMÉS blockQuote>
Je comprends que cela peut sembler stupide, mais je trouve le plus facile à encoder la position de cette façon. Déplacer le candidat pour moi n'est qu'une autre position de ce type (qui s'est produite après le déménagement suivant, peut changer ce comportement, je pense) P>
6 Réponses :
Utilisez simplement la source de l'un des programmes d'échecs Python tels que Pychess ou Chess Python P>
Plus précisément, les mouvements valides pour Pychess: https://code.google.com/p/pychess/source/browse/lib/pychess/utils/lutils/validator.py p>
La référence que vous avez donnée est pour l'évaluation (notation) d'une position de conseil et non pour la validation (vérification des mouvements légaux).
@John: Vous êtes correct, il semble que je ne puisse pas trouver le bon bit de code en ce moment. Mais la réponse de dimo414 semble mieux quand même pour que je ne regarde pas plus loin :)
@Oleg: Vous utiliseriez le module pychess.utils.lutils.validator. Il faut un objet pychess.Utils.Lutils.board et un lmove One. Les deux peuvent être initialisés à partir de formats d'échecs pure tels que la notographie fen et algébrique.
ne ferait pas mal de regarder certaines des réponses associées sur le côté: Bibliothèque de validation de déplacement des échecs < / a> et https://stackoverflow.com/questions/1239913/smallest-chess-playing-programme < / a> se démarquer. p>
Bien que personnellement, je suis en faveur de la construction de votre propre. p>
Ce n'est pas facile à construire propre :(. Quoi qu'il en soit, ce serait génial de réutiliser quelque chose déjà créé
Semble assez simple pour moi - identifier le type de pièce, déterminer tous les chemins pour ce type de pièce de cette position. Vérifiez si le déplacement est sur un chemin valide. Ensuite, confirmez (sauf pour Knight) qu'il n'y a pas de pièce sur ce chemin, ni de pièce amicale dans le nouvel emplacement.
Peut-être que, mais s'il y a Python Lib ouvert qui résout le problème déjà, je l'utiliserais.
Oui, j'avais d'accord pour dire que c'est simple. Ce n'est pas comme si vous essayez d'évaluer l'utilité du déménagement ou de quelque chose. Il sera probablement plus facile de simplement rouler votre propre plutôt que de disséquer la documentation / source d'un programme open source.
Peut-être que, mais je serais prêt à parier que dans les 2 heures et plus que vous avez posé votre question, vous auriez pu rouler votre choix déjà. Il y a certainement quelque chose à dire pour utiliser des outils préexistants, mais il est parfois plus facile de réinventer la roue que de faire fonctionner la roue de quelqu'un d'autre avec votre voiture.
Vous manquez des informations manquantes. Dont le tour de déménagement, si chaque roi a jamais déménagé (signifie que le château n'est pas autorisé), le statut "en passant" de chaque pion. Cela de côté, ce serait un exercice très instructif pour vous d'écrire le vôtre, en utilisant une représentation de panneau non compliquée comme la matrice 10x12-Element décrite ICI (sauf que vous le feriez linéairement à un réseau de 120 éléments). P>
+1. Si possible, l'OP devrait stocker ce type d'informations en tant que drapeaux avec l'état du conseil d'administration.
Il y a aussi la règle de répétition triple et la règle de cinquante mouvement à considérer
@gnibbler: j'ai écrit "par exemple", ne voulant pas trop faire peur à l'Op ;-)
Consultez Echessboard . P>
Malheureusement, il a des inconvénients: p>
La bonne chose est que le code est GPL afin de pouvoir jouer avec elle aussi longtemps que vous vous en tenez à cette licence. P>
Je sais que c'est une question plutôt ancienne, mais mon frère et moi cherchais la même chose et nous avons rencontré ce génial petit module Python appelé chessnut .
Voici un exemple d'utilisation: p> et ici la sortie générée: p> rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 4 6
['b8a6', 'b8c6', 'd8e8', 'f8e8', 'f8f7', 'g8h8', 'g8f7', 'a7a6', 'a7a5', 'b7b6', 'b7b5', 'c7c6', 'c7c5', 'd7d6', 'd7d5', 'e7e6', 'e7e5', 'g7h8', 'g7h6', 'h7h6', 'h7h5', 'f6e8', 'f6d5', 'f6e4', 'f6g4', 'f6h5', 'g6g5', 'f5f4']
r1bq1rk1/ppppp1bp/2n2np1/5p2/2PP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 5 7
J'ai fait une implémentation simple des échecs avec la validation de déplacement ici: https://github.com/akulakov/ Pychess p>
La logique de validation est dans la méthode "Movs ()" de chaque pièce, et vous pouvez valider votre propre geste en générant une liste complète des mouvements et en vérifiant si votre déménagement est là. P>
Tu ne peux pas écrire un toi-même? :)
Pouvez-vous partager votre codage de chaîne du tableau et votre codage d'un candidat à déplacement?
Pourquoi ne pas utiliser une notation standard comme Fen, au lieu d'inventer votre propre? en.wikipedia.org/wiki/forsyth-edwards_notation