Acad?mie de Versailles
Cergy Pontoise Echecs
Accueil du site > Jouer > Echiquier ARDuino > Vérifier la validité des coups

Vérifier la validité des coups

mardi 14 avril 2015, par Fred Just

Pour améliorer la reconnaissance automatique des coups il va être nécessaire de vérifier la validité des coups et surtout lister les prises possibles pour une pièce qui disparaît sans ré-apparaître (prise de type carreau)

début de réflexion sur la manière de coder cela simplement :

LesCases(100) : l’échiquier est considéré comme un tableau de 64 cases +36 cases de bordure
la case A1 est la case 11 soit ligne*10+colonne
la case H8 est la case 88

les bords sont les cases restantes, cela permet de tester simplement si on a atteint le bord

  • une tour avance dans les directions ±1 et ±10
  • un fou avance de ±9 (+10 -1) et ±11 (+10 +1)
  • un cavalier va vers les cases ±8 ±12 ±19 ±21
  • la dame de ±1 ±9 ±10 ±11
  • le roi de ±1 ±9 ±10 ±11 une seule fois
  • le pion blanc se déplace +10 ou +20 le premier coup et prend +9 ou +11
  • le pion noir se déplace -10 ou -20 le premier coup et prend -9 ou -11

pour générer les coups possibles il suffit de suivre le chemin depuis la case de la pièce jusqu’à rencontrer une pièce ou un bord et ajouter la prise s’il s’agit d’une pièce adverse.

Avec cela j’ai réussi a corriger automatiquement les doutes pendant le reconnaissance des coups lorsqu’il n’y a qu’une seule prise possible.
EDIT : L’exportation en PGN est maintenant directement exécuté depuis VB
car il est possible de vérifier que le second cavalier peut aussi atteindre la case et corriger Cd7 en Cbd7

Et s’il y a plusieurs prises possibles, il suffit de chercher la prise qui permet de poursuivre la reconnaissance sans erreur.

Voila ce que cela donne en VB très simplement

'AJOUTE LES COUPS POSSIBLE DANS UNE DIRECTION et AJOUTE LA PRISE A LA FIN
   Public Sub AddMoves(ByVal LaCase As Byte, ByVal Direction As Integer, ByRef LesMouvements As String)
       Dim CasePossible As Byte
       CasePossible = LaCase + Direction

       While Board2(CasePossible ) = " "
           
           LesMouvements &= CasePossible.ToString & "|"
           If UCase(Board2(LaCase)) = "K" Then 'si c'est un roi on s'arette
               Exit Sub
           End If
           CasePossible = CasePossible + Direction
       End While

       If CouleurDe(CasePossible) = CouleurAdverse(LaCase) Then
           LesMouvements &= "x" & CasePossible.ToString & "|"
       End If

   End Sub

'Cherche les coups possibles d'une tour
Public Function RookMoves(ByVal LaCase As Byte) As String
       Dim TempoMoves As String = ""

       AddMoves(LaCase, -10, TempoMoves)
       AddMoves(LaCase, 10, TempoMoves)
       AddMoves(LaCase, -1, TempoMoves)
       AddMoves(LaCase, 1, TempoMoves)

       RookMoves= TempoMoves

   End Function


8 Messages de forum

  • Vérifier la validité des coups 14 avril 2015 15:12, par François Terrot

    - Attention pour la dame a ne pas changer de direction une fois le déplacement commencé, je verrais plus la dame comme une vérification en 2 passes : on teste avec le déplacement fou, puis on teste comme une tour.

  • Vérifier la validité des coups 14 avril 2015 16:56, par François Terrot

    Concernant les pions :
    - le premier coup d’un pion blanc que pour les cases de 1 à 9
    - pour les noirs de 81 à 89
    - et pour la prise en passant ?

    • Vérifier la validité des coups 14 avril 2015 17:00, par Fred Just

      lorsqu’un pion avance de 2 cases on stock la case "en passant" comme dans une notation FEN

      le plus embêtant c’est le déplacement du roi et la gestion des cases interdites, il faudrait un autre tableau des cases contrôlées par l’adversaire mais comme le but n’est pas de tout vérifier juste d’aider la fonction de reconnaissance je croix que je vais m’en passer

      • Vérifier la validité des coups 14 avril 2015 17:02, par François Terrot

        aujourd’hui tu stockes l’occupation des cases comment ?

        • Vérifier la validité des coups 14 avril 2015 17:04, par Fred Just
          **********
          *RNBQKBNR*
          *PPPPPPPP*
          *        *
          *        *
          *        *
          *        *
          *pppppppp*
          *rnbqkbnr*
          **********
      • Vérifier la validité des coups 15 avril 2015 09:24, par Fred Just

        En fait je peux simplement supprimer des mouvements possibles du roi, les cases que les pièces adverses peuvent atteindre (je ne cherche pas l’optimisation du code ;-)

  • Vérifier la validité des coups 14 avril 2015 16:59, par François Terrot

    Pour le roi :
    - il faut penser a vérifier qu’un mouvement n’arrive pas dans les cases adjacentes du roi adverse
    - il est interdit de prendre le roi adverse pour ailleurs (sauf cas particuliers !!!!)

  • Vérifier la validité des coups 14 avril 2015 17:00, par François Terrot

    J’ai failli oublier pour la tour/roi : petit et grand roques


Cergy Pontoise Echecs