Tout l’échiquier dans une chaîne

Création d’un échiquier en trois de lignes de code VBA.

Création d’un échiquier en trois de lignes de code VBA.


Ouvrir votre classeur Chess.xls puis le VBE (Alt+F11), la fenêtre Exécution (Ctrl+G), et la fenêtre d’édition sur le module ModChess.

Les constantes

Une constante a une valeur qui ne change pas. On ne peut pas la modifier.

Dans la fenêtre d’édition du module ModChess, on place la déclaration des constantes généralement après Option Explicit et avant la première fonction.

Option Explicit

Public Const countRank As Byte = 8
Public Const countFile As Byte = 8

Public Const ascFileA As Byte = 97
Public Const ascFileH As Byte = 104

Public Const strGameStartPosition = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"

En VBA, on déclare une constante par le mot-clé Const suivi du nom de la constante, optionnellement son type, puis "=" et enfin sa valeur. C’est donc une affection de la constante qui ressemble à une affection de variable sauf qu’elle commence par Const et que cette affection est unique au moment de la déclaration et non dans une instruction du corps d’une fonction. C’est l’unique moment où vous verrez une constante en partie gauche du symbole d’affectation "=".

Pour le nombre maximum de rangées ou de colonnes de l’échiquier, on a voulu préciser un type plus restreint qu’un Integer en indiquant explicitement le type As Byte. Cela signifie que l’on ne peut initialiser la constante qu’avec un entier entre 0 et 255 alors qu’un Integer peut être négatif et/ou beaucoup plus grand. Si à cause d’un bug l’indice de colonne dépasse 255 ou devient négatif, on aura automatiquement une erreur qui ne serait pas détectée avec un Integer.

Le mot-clé Public avant Const définit l’étendue de visibilité (scope) de la constante pour tous les modules, c-a-d que la constante est connue dans tous les modules et doit être unique.
Définir une constante Public est aussi utile dans la fenêtre d’Exécution sinon la constante n’est pas reconnue.

? ascFileA

97

On reconnaît cette valeur que l’on a vue dans Coordonnées sur l’échiquier (2eme partie).

? Asc("a")

97

Cette valeur ASCII est fixe. Plutôt que de l’évaluer à chaque fois par l’appel de la fonction Asc(), on décide de déclarer la constante correspondante avec la dite valeur fixe. Cela prend un tout petit peu plus de place, mais c’est beaucoup plus rapide que d’appeler la fonction Asc() en terme de temps d’exécution.

En VBA, on ne peut pas utiliser d’appel de fonction pour initialiser la valeur d’une constante. Const ascFileA = Asc(’’a’’) n’est pas accepté. Seule une constante numérique ou de chaîne littérale est valable dans une déclaration de constante.

Représentation d’une pièce par une lettre unique

Choisissons une nouvelle représentation de l’échiquier avec une lettre minuscule par pièce selon le type de la pièce et sa couleur.

Pièce par couleurBlancsNoirs
Roi ’’k’’ ’’l’’
Dame ’’q’’ ’’w’’
Tour ’’r’’ ’’t’’
Fou ’’b’’ ’’v’’
Cavalier ’’n’’ ’’m’’
Pion ’’p’’ ’’o’’

Pour les Blancs, c’est l’initiale internationale (en anglais) du nom de la pièce : king, queen, rook, bishop, knight (et non ’’k’’ déjà utilisé pour king), pawn. Pour les Noirs, on a choisi d’autres lettres uniques.

Tout l’échiquier dans une String

Notre but est de représenter la position initiale des pièces sur l’échiquier au début d’une partie par une seule String. La fonction BoardBuild() sans paramètre retourne l’échiquier initial.

Comme il s’agit d’une déclaration de fonction, insérez dans la fenêtre d’édition (ou de code) du module ModChess après la déclaration des constantes ou après la déclaration de FileRankToString() :

Function BoardBuild() As String
Dim strPieceWhite As String, strPieceBlack As String

    strPieceWhite = "rnbqkbnr" + String(countFile, "p")
    strPieceBlack = String(countFile, "o") + "tmvwlvmt"
    BoardBuild = strPieceWhite + String(4 * countFile, " ") + strPieceBlack
End Function

On utilise une nouvelle fonction String(nombre de répétition, caractère) qui retourne n fois le caractère fourni en paramètre. String(8, ’’p’’) génère les huit pions Blancs. String(8, ’’ ’’) est une rangée entièrement vide. Il y a quatre rangées vides entre les pions Blancs et les pions Noirs.

Dans la fenêtre d’Exécution :

? BoardBuild()

rnbqkbnrpppppppp                                ooooooootmvwlvmt

Le début de la chaîne ressemble fortement avec la notation FEN (Forsyth-Edwards Notation) de la position de départ :

? strGameStartPosition

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1

Calculons la longueur (Length) de la chaîne représentant l’échiquier complet :

? Len(BoardBuild())

64

Il y a bien 64 cases sur l’échiquier.

Tout l’échiquier est représenté dans une seule String ! On peut difficilement faire plus court (trois lignes de code VBA hors déclaration) pour construire un échiquier complet puis l’afficher.

Prochainement on n’améliorera progressivement la présentation de ce premier échiquier d’abord dans la fenêtre d’Exécution pour le développeur puis dans la feuille de calcul pour l’utilisateur final.


Précédent : Mise au point avec le débogueur VBA

Suivant : Alphabet des colonnes

Posté le 9 juillet 2011 par Matt