On ne va pas arrêter là ce tuto. Je vous propose un petit exercice que je vais vous commenter pas à pas.
Grâce à ce que nous venons d'apprendre, je vais vous montrer comment
déplacer un caractère sur l'écran texte, grâce aux flèches. (Essayez si vous le voulez une fois avant de regarder la correction.)
1er code
Tout d'abord, j'ai besoin d'effacer l'écran et d'initialiser mes variables. Je vais en avoir besoin de 3 pour le moment :
- X : coordonnée du caractère sur la longueur
- Y : coordonnée du caractère sur la largeur
- K : le Getkey
Je dois aussi mettre en place la boucle dans laquelle va se dérouler le programme.
Mais passons au code !
Code : Pascal1
2
3
4
5
6 | :ClrHome
:1->X:1->Y
:Repeat K=105
:getKey->K
:
:End
|
Bien, pour le moment, le programme tourne jusqu'à ce qu'on appuie sur la touche Enter. C'est déja pas mal, mais on peut faire mieux !
Affichage du caractère
Nous allons mettre en place l'affichage du caractère en utilisant...
Output, bien sûr !
Code : Pascal
On va aussi rajouter les conditions pour déplacer le caractère.
Code : Pascal1
2
3
4 | :If K=24:X-1->X // à gauche
:If K=26:X+1->X // à droite
:If K=25:Y-1->Y // en haut
:If K=34:Y+1->Y // en bas
|
Ce qui nous donne :
Code : Pascal 1
2
3
4
5
6
7
8
9
10 | :ClrHome
:1->X:1->Y
:Repeat K=105
:Output(Y,X,"+"
:getKey->K
:If K=24:X-1->X
:If K=26:X+1->X
:If K=25:Y-1->Y
:If K=34:Y+1->Y
:End
|
Gestion des collisions
Vous avez remarqué que si vous tentez de sortir de l'écran, vous avez simplement droit à un joli arrêt du programme. Il faut gérer ça en empêchant X et Y de dépasser certaines valeurs. Et on va le faire à grands renforts de
If !
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | :ClrHome
:1->X:1->Y
:Repeat K=105
:Output(Y,X,"+"
:getKey->K
:If K=24:X-1->X
:If K=26:X+1->X
:If K=25:Y-1->Y
:If K=34:Y+1->Y
:If X=0:1->X // le bord gauche
:If X=17:16->X // le bord droit
:If Y=0:1->Y // le bord du haut
:If Y=9:8->Y // le bord du bas
:End
|
Derniers bugs
Vous avez sûrement remarqué que le + laisse une grosse traînée derrière lui.
On va s'occuper de ça !
A chaque tour de boucle, on doit d'abord enregistrer les coordonnées X et Y avant de les modifier. On peut ainsi effacer leurs anciennes positions avant de les placer à leurs nouvelles. Pour cela, il nous faut 2 nouvelles variables. Pourquoi pas A et B ?
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | :ClrHome
:1->X:1->Y
:1->A:1->B
:Repeat K=105
:Output(A,B," " // il faut mettre un espace vide
:Output(Y,X,"+"
:Y->A:X->B // on enregistre avant modification
:getKey->K
:If K=24:X-1->X
:If K=26:X+1->X
:If K=25:Y-1->Y
:If K=34:Y+1->Y
:If X=0:1->X
:If X=17:16->X
:If Y=0:1->Y
:If Y=9:8->Y
:End
|
Optimisation(s)
Je vais vous apprendre une astuce pour économiser quelques octets dans votre programme. On peut réduire la taille des conditions pour le déplacement.
De cela :
Code : Pascal1
2
3
4 | :If K=24:X-1->X
:If K=26:X+1->X
:If K=25:Y-1->Y
:If K=34:Y+1->Y
|
On peut passer à ça : (les variables sont incrémentées ou décrémentées si la condition est vraie)
Code : Pascal1
2
3
4 | :X-(K=24->X
:X+(K=26->X
:Y-(K=25->Y
:Y+(K=34->Y
|
Et même à ça : (en combinant deux conditions)
Code : Pascal1
2 | :X-(K=24)+(K=26)->X
:Y-(K=25)+(K=34)->Y
|
Et voilà un programme, plus propre, plus léger, plus facile à comprendre.
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | :ClrHome
:1->X:1->Y
:1->A:1->B
:Repeat K=105
:Output(A,B," "
:Output(Y,X,"+"
:Y->A:X->B
:getKey->K
:X-(K=24)+(K=26)->X
:Y-(K=25)+(K=34)->Y
:If X=0:1->X
:If X=17:16->X
:If Y=0:1->Y
:If Y=9:8->Y
:End
|
Conclusion
J'espère que vous avez compris comment on se sert des
Getkey .
Le programme qu'on a écrit est simple, mais à la base de beaucoup de jeux (vous retrouverez ce principe si vous faites un
Snake).
J'ai aussi énoncé un principe important :
l'optimisation.
Quand on a fini d'écrire un programme, l'important est de bien le relire pour voir si on ne peut pas faire plus simple, ou plus court à un endroit, utiliser moins de variables, ... Ainsi votre programme sera plus léger en place, plus rapide, plus simple à modifier ! Que des avantages, quoi !