6
votes

Python: Les échecs bougent la validation

Quelqu'un sait-il s'il existe une fonction de validation des échecs de python libres disponibles quelque part?

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.

serait vraiment intéressé à voir des exemples, si possible.


La chaîne semble de cette façon:

EMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMÉS

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)


3 commentaires

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


6 Réponses :


3
votes

Utilisez simplement la source de l'un des programmes d'échecs Python tels que Pychess ou Chess Python

Plus précisément, les mouvements valides pour Pychess: https://code.google.com/p/pychess/source/browse/lib/pychess/utils/lutils/validator.py


3 commentaires

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.



1
votes

5 commentaires

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.



5
votes

3 commentaires

+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 ;-)



0
votes

Consultez Echessboard .

Malheureusement, il a des inconvénients:

  • Il semble être abandonné, car les bugs signalés il y a plus d'un an dans les commentaires ne semblent pas être fixés
  • Le code n'est pas vraiment conforme Pep-8
  • Certaines méthodes sont très laides et grandes, toutes les méthodes ne disposent pas de docstrings
  • Il n'y a pas de test unitaire, de sorte que la creuser dans ce code pourrait être un défi (je l'ai déjà essayé au moins deux fois et échoué)

    La bonne chose est que le code est GPL afin de pouvoir jouer avec elle aussi longtemps que vous vous en tenez à cette licence.


0 commentaires

4
votes

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> xxx pré>

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


0 commentaires

0
votes

J'ai fait une implémentation simple des échecs avec la validation de déplacement ici: https://github.com/akulakov/ Pychess

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à.


0 commentaires