Coordonnées sur l’échiquier (2ème partie)

mardi 5 juillet 2011
par  Matt
popularité : 3%

Colonne de la case du Cavalier en g8 à partir de son numéro 62 et affichage de ’’g8’’


Coordonnées sur l’échiquier (2ème partie)

Cas pratique : la case 62 a pour colonne ’’g’’

Comme on a dû probablement fermer Excel à la fin de la session précédente, on le rouvre ainsi que l’éditeur VBE (Alt+F11).

Coordonnées file en abscisse et rank en ordonnée de la case g8 du Cavalier des Noirs

On restaure le contexte dans la fenêtre Exécution (Ctrl+G dans le VBE) en répétant l’initialisation d’indexSquare avec 62 puis le calcul du rank vu dans la 1ere partie.

Copier-coller et valider par ENTER chaque ligne une à une dans la fenêtre Exécution (et non pas le bloc de lignes).

indexSquare = 62
rank = indexSquare \ 8
file = indexSquare - rank * 8
? file

6

On applique l’équation : file = indexSquare - rank * 8

Le résultat 6 est stocké dans la variable file à gauche du signe d’affectation "=".

A partir de l’information file = 6, calculons la chaîne ’’g’’.

Pour cela on utilise deux fonctions complémentaires selon le code ASCII de la lettre en minuscule :

  • Asc(string) l’abréviation d’ASCII : conversion String vers Integer.
  • Chr(integer) l’abréviation de Character : conversion Integer vers String.
? Asc("a")

97

Vous pouvez utiliser l’aide en ligne en double cliquant par exemple sur "Asc" dans " ? Asc(’’a’’)" puis la touche de fonction F1 pour en savoir plus sur la fonction asc.

asc(’’a’’) vaut 97 en base 10, soit également &H61 (le préfixe "&H" signifie Hexadécimal) en base 16 ou "0110 0001" en base 2.

ASCII12345678
&H60 a b c d e f g h

La fonction inverse partant du code ASCII affiche le caractère correspondant, en fait une chaîne de caractère ne contenant qu’un seul caractère.

? Chr(97)

a

Pour retrouver la colonne "g" à partir de file = 6, essayons :

? Chr(file + Asc("a"))

g

Chess file 0 1 2 3 4 5 6 7
Chr(file+97) ’’a’’ ’’b’’ ’’c’’ ’’d’’ ’’e’’ ’’f’’ ’’g’’ ’’h’’

En ajoutant file au code ASCII de la lettre minuscule ’’a’’, Chr() retourne la file+1ème lettre de l’alphabet en minuscule.


Test d’égalité par rapport à l’affectation

? Chr(Asc("a")) = "a"

True

Signifie que l’égalité est vraie entre Chr(Asc(’’a’’)) et la chaîne ’’a’’.

Le symbole "=" est ici un test d’égalité à ne pas confondre avec le signe "=" dans l’affectation indexSquare = 62. La différence est que le test d’égalité est une expression booléenne (True ou False) dont on affiche le résultat avec l’opérateur maintenant bien connu " ?".

" ?" n’apparaît pas dans l’affectation indexSquare = 62.

On ne l’a utilisé qu’après l’affectation dans la ligne qui suit pour afficher le contenu de la variable indexSquare par : ? indexSquare

L’imbrication Chr(Asc(’’a’’)) retourne toujours comme résultat son paramètre d’entrée, quelque soit la lettre entre guillemets.


Retour sur le rank de la case 62 qui a pour rangée 8

Le rank peut évoluer de 0 à 7 (représentation interne) tandis que la rangée est affichée de 1 à 8 sur un échiquier (représentation externe visible ou GUI : Graphic User Interface).

Pour le rank = 7, il suffit de l’incrémenter pour obtenir la rangée 8.

? rank + 1

8

Cependant on ne peut pas additionner une chaîne "g" avec un nombre 8

car ils ne sont pas de même type.

? "g" + 8

Run-time error ’13’ : Type mismatch.

On peut concaténer deux chaînes pour produire une nouvelle chaîne résultant de l’ajout en fin de la première chaîne du contenu de la seconde. On convertit donc la rangée numérique en rangée de type chaîne grâce à la fonction CStr (Conversion to String).

? "g" + CStr(8)

g8

A partir de file et rank, affichage du nom ’’g8’’ de la case 62

Finalement regroupons le calcul du nom de la case en une seule expression.

? Chr(file + Asc("a")) + CStr(rank + 1)

g8

L’opérateur "+" devant Asc() est une addition numérique. L’opérateur "+" devant CStr() n’est pas une addition de nombres mais la concaténation de deux chaînes, c-a-d que l’on ajoute à la fin de la première chaîne ’’g’’ la seconde chaîne ’’8’’.

En conclusion, on a introduit deux variables intermédiaires rank et file calculées à partir du paramètre d’entrée indexSquare pour afficher la conversion Integer vers String de la case ’’g8’’ grâce aux fonctions ASCII : Asc(integer), Character : Chr(string), Conversion to String : CStr(integer).


Précédent : Coordonnées échiquéennes en Excel VBA (1ere partie)

Suivant : Votre première fonction VBA


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