Affichage des coups des Blancs en VBA

samedi 6 août 2011
par  Matt
popularité : 8%

Notation et affichage amélioré des coups : DbgMovesNotation, DgbMovesPrint


Le générateur de coup du pion e2 du Roi génère une liste de deux coups.

Automatisons la notation de chaque coup et améliorons l’affichage de tous les coups des Blancs.


Notation d’une liste de coups

Comme on a vu dans la session précédente le système de notation d’un coup, on veut le généraliser à une liste de coups.

Ouvrir le classeur Chess.xls contenant les modules importés de ChessVba04.zip.

Ouvrir le VBE : Visual Basic Editeur (Alt+F11)

Dans la fenêtre projet du VBE, cliquez sur le module ModChess.

Dans la liste des procédures du VBE, sélectionner DgbMovesPrint.

Au-dessus de DgbMovesPrint(), copier-coller la procédure DbgMovesNotation()

Sub DbgMovesNotation(ByVal listMove As Collection)
Dim indMove As Integer, moveThis As Move
   
   If Not listMove Is Nothing Then
       For indMove = 1 To listMove.Count
           Set moveThis = listMove(indMove)
           If moveThis.TypeOfMove <> moveTypeNull Then
               moveThis.PgnSanFormat True
           End If
       Next
       Debug.Print listMove.Count & " moves have been annotated"
   End If
End Sub

Le générateur de coups de pion

Dans la fenêtre d’Exécution immédiate (Ctrl+G) du VBE, copier-coller et valider par ENTER :

DynamicContext

C’est l’initialisation à faire systématiquement à chaque début de session.

Appelons le générateur de coup pour le pion du Roi en e2 avec comme paramètre listOfMoves :

boardMain.GetPiece(e2).GenerateLazyMoves listOfMoves

Générons la notation de chaque coup grâce à la nouvelle procédure que l’on a ajoutée.

DbgMovesNotation listOfMoves

[bleu marine]2 moves have been annotated[/bleu marine]


Affichez la liste des coups

La liste des coups, que le pion e2 peut jouer, est :

DgbMovesPrint listOfMoves

[bleu marine]Move 1 : e3

Move 2 : e4[/bleu marine]

Analysons la procédure DgbMovesPrint() :

Sub DgbMovesPrint(ByVal listMove As Collection)
Dim indMove As Integer, moveThis As Move

   For indMove = 1 To listMove.Count
       Set moveThis = listMove(indMove)
       If moveThis.TypeOfMove <> moveTypeNull Then
           Debug.Print "Move" + Str(indMove) + ": " + moveThis.Description
       End If
   Next
End Sub

On reconnaît la boucle For Next avec la variable indMove incrémenté de l’indice 1 jusqu’au nombre de coups dans la Collection listMove.

L’instruction Set moveThis = listMove(indMove) accède à l’élément indMove dans la liste.

Si le coup n’est pas de type moveTypeNull, alors dans la partie Then, on affiche dans la fenêtre d’Exécution immédiate "Move" suivi de son n° suivi de " : " suivi de la description du coup.


Améliorer l’affichage de la liste des coups

Si on a détaillé cette procédure, c’est pour proposer un premier exercice.

Quand le nombre de coups de la liste sera important, on aimerait que l’on affiche le nombre de coups de la liste suivi de " : ". Ensuite on ne veut plus afficher un coup par ligne mais dix coups par ligne, chaque coup étant séparé par une virgule.

Pour vous aider, on donne le début de la procédure avec les déclarations et la fin de la procédure.

L’objet de l’exercice est de compléter le corps de la boucle For Next en remplaçant le commentaire par ce qu’il convient. Notez que l’on propose de passer par la variable strLine qui contiendra une ligne de nbrMoveInLine coups, au maximum nbrMaxMoveInLine.

Sub DgbMovesPrint(ByVal listMove As Collection)
Const nbrMaxMoveInLine = 10
Dim indMove As Integer, moveThis As Move, strLine As String, nbrMoveInLine As Integer

   If Not listMove Is Nothing Then
       nbrMoveInLine = 0
       strLine = CStr(listMove.Count) + " : "
       For indMove = 1 To listMove.Count
           Set moveThis = listMove(indMove)
           If moveThis.TypeOfMove <> moveTypeNull Then
               ' ... à compléter en remplissant la String strLine
           End If
       Next
       Debug.Print strLine
   End If
End Sub

La concaténation dans la chaîne strLine de la description de chaque coup obéit au même principe que la concaténation des lettres dans la fonction Alphabet(). Il faut générer entre chaque description de coup le séparateur virgule ’’,’’ et tous les dix coups, le retour-chariot VbCrLf.

Le résultat attendu dans la fenêtre d’Exécution immédiate est :

DgbMovesPrint listOfMoves

[bleu marine]2 : e3, e4[/bleu marine]


Générer, annoter et afficher tous les premiers coups des Blancs

Démarrons une nouvelle session dans la fenêtre d’Exécution immédiate :

DynamicContext

Générons tous les coups que les Blancs peuvent jouer au début de la partie.

boardMain.playerWhite.GenAllLazyMoves listOfMoves

Annotons tous les coups de la liste.

DbgMovesNotation listOfMoves

[bleu marine]20 moves have been annotated[/bleu marine]

C’est là tout l’intérêt de votre nouvelle version d’affichage de la liste.

Au lieu d’afficher 20 lignes, seules deux lignes seront affichées contenant dix coups par ligne.

DgbMovesPrint listOfMoves

[bleu marine]20 : h3, h4, g3, g4, f3, f4, e3, e4, d3, d4,

c3, c4, b3, b4, a3, a4, Nf3, Nh3, Na3, Nc3[/bleu marine]

La solution de la nouvelle version de DgbMovesPrint() sera proposée dans le prochain article.


Précédent : Un générateur de coups d’Echecs en VBA

Suivant : Ca bouge sur l’échiquier d’Excel


Brèves

Championnat jeunes 2018

dimanche 25 février 2018

A St Sernin sur Rance, Vadim Breton se qualifie pour le championnat de France jeunes. Il termine à la 4ème place des benjamins. http://echecs-occitanie.com/spip.php?article382&mode=AF

Les Jeunes qualifiés en NIII !

mercredi 14 décembre 2016

Dimanche 11 décembre 2016, aux interclubs jeunes à Leguevin, notre équipe a gagné un match et fait match nul aux deux autres.

L’équipe composée de Xavier, Vadim, Aurélie et Titouan termine 8ème et se qualifie pour la N3. A noter que Xavier et Vadim ont gagné toutes leurs parties.

Sur le Web : Site de la LMPE

Championnat jeunes

lundi 5 décembre 2016

Xavier, Vadim et Martin trois champions du Tarn et Garonne
Lire l’article

Coupe Loubatière

lundi 5 décembre 2016

Le club qualifié pour la phase régionale de la coupe Loubatière
Lire l’article

Sur le Web : Coupe Loubatière

Tournoi interne 2016-2017

lundi 5 décembre 2016

C’est reparti pour le tournoi interne : 1 partie par mois de novembre à mai
Lire l’article

Live Playchess.com

mercredi 7 septembre 2016