Aller au menu - Aller au contenu
 Zozor
> Le Site du Zéro > Cours > L'Axe Parser > Les débuts > Le getKey > Lecture du tutoriel

Le getKey Editer


Informations sur le tutoriel

AvatarAvatar
Auteurs : kindermoumoute et wag1
Difficulté : Facile


Plus d'informations Plus d'informations
C'est bien beau, vous pouvez calculer pendant un programme, mettre des conditions, le faire tourner dans une boucle, afficher plein de choses à l'écran, etc.. Mais ça ne ressemble en rien à un jeu, pour l'instant on se contente de regarder notre programme.
Le but de ce chapitre est de vous apprendre à manipuler les getkey, fameuse commande qui repère si une touche est pressé, et l'assimiler à toutes les choses que l'on a vu jusque la.
Chapitre précédent Sommaire Chapitre suivant

Explication Editer

La commande getKey, comme en TI-Basic, repère si une touche à été pressé, on peut donc utiliser la même syntaxe qu'en TI-Basic :
Code : Axe Parser - Sélectionner
1
:getKey→K


La commande getKey se trouve ici : Image utilisateur Image utilisateur Image utilisateur


Donc la variable K va contenir la valeur d'une touche pressé.

Mais comment savoir quelle valeur appartient à quelle touche ?


Souvenez vous ! Dans le dossier zip que vous avez téléchargé au début :
Citation
  • Un fichier keycodes.png


Je vous enlève la tache de double cliquer dessus pour voir l'image :ange: :

Image utilisateur


Cela veut dire qu'à chaque fois que j'aurais besoin de la commande getKey, je devrais avoir sous la main cette image?


Non pas forcément, car si K est une simple valeur, on peut l'afficher !
Je vous laisse chercher comment faire :-° .





:-° Après quelques secondes vous aurez trouvé ce code :

Secret (cliquez pour afficher)
Code : Axe Parser - Sélectionner
1
2
3
4
5
6
7
:.GETKEY
:0→K
:Repeat K
:getKey→K
:End
:Text(0,0,K►Dec
:Pause 2000


:magicien:

L'erreur ici serait d'afficher K dans la boucle, car quand aucune touche n'est pressé, K vaut 0, et il affichera toujours 0 si l'on ne s'en rend pas compte.


Mais on peut l'optimiser en utilisant dès maintenant la commande getkey :

Secret (cliquez pour afficher)
Code : Axe Parser - Sélectionner
1
2
3
4
5
6
7
8
:.GETKEY
:0→K
:Repeat K=15
:getKey→K
:If K
:Text(0,0,K►Dec
:End
:End



Le programme affichera la dernière touche pressé, et s'éteindra quand la touche 15 aura été pressé : Image utilisateur


Mieux encore, getKey→K peut être mis directement au début de la boucle!
Secret (cliquez pour afficher)
Code : Axe Parser - Sélectionner
1
2
3
4
5
6
7
:.GETKEY
:0→K
:Repeat getKey→K=15
:If K
:Text(0,0,K►Dec
:End
:End


Le getKey en action Editer

Hormis les codes touches différents, c'est exactement la même commande qu'en TI-Basic?



En faite il y a 2 commandes getKey en Axe Parser, la première va retourner un nombre pour une touche qui aurait été pressé (voir plus haut). Et la deuxième va retourner un booléen pour une touche précise.
Reprenons notre code pour les vies. Je veut que l'on quitte quand la touche Image utilisateur à été pressé :

Code : Axe Parser - Sélectionner
1
2
3
:Repeat getKey(15)
:.mon code de jeu.
:End


L'avantage ? Déjà on a plus de variable à se trimballer :lol: , et grâce à cette commande, on peut repérer si plusieurs touches on été pressés en même temps !

Code : Axe Parser - Sélectionner
1
2
3
4
5
6
7
8
:Repeat getKey(15)
:If getKey(9) or getKey(54)
:.code
:End
:If getKey(33) and getKey(25)
:.code
:End
:End


La commande getKey renverra 0 si la touche indiqué n'est pas pressé (FAUX), et 1 si elle l'est (VRAI)


Quoi? vous pensiez que c'était plus compliqué que cela? :lol: Que nenni !

Exercice Editer

Pour vous échauffer pour le prochain chapitre, je vais donner un petit exercice sur la commande getKey.

Donc le but de l'exercice vas être de faire bouger la lettre 'O' à travers l'écran de la calculatrice en fonction des touches : Image utilisateur Image utilisateur Image utilisateur Image utilisateur.
Le 'O' ne doit pas sortir de l'écran (96*64 je le rappelle).
Le programme se ferme en appuyant sur Image utilisateur


J'en dit pas plus, à vos calto!

Résultat Editer

Vous êtes sur d'avoir bien cherché? :zorro:


D'abords, il fallait choisir la commande pour afficher la lettre 'O'. Le plus adapté ici est la commande Text( car vu la rapidité de l'Axe Parser, vous n'auriez pas le temps de voir le 'O' se balader avec la commande output(. Seulement, il y a une difficulté qui se pose ici ; en déplaçant le 'O', il va laisser des traces derrière lui en allant de gauche à droite et de bas en haut. Il fallait donc chercher une méthode plus ou moins efficaces. Je vous propose de mettre un espace avant le 'O' et d'en mettre 5 autres, 6 pixels en dessous des coordonnées normales (X,Y).

Donc en ajoutant la boucle qui se termine en appuyant sur Image utilisateur, on aura ce code :
Secret (cliquez pour afficher)
Code : Axe Parser - Sélectionner
1
2
3
4
5
6
7
8
9
:0→X→Y
:.On initialise les variable X et Y à 0 (X = largeur et Y = hauteur)
:
:Repeat getKey(15)
:.ici la boucle repeat sera préférable
:Text(X,Y+6,"     "
:Text(X,Y," O
:.code pour modifier X et Y
:End


Bon, c'est un peu tiré par les cheveux je vous l'accorde. Mais si vous avez abandonné votre programme en rencontrant ce problème, retournez à votre calculatrice et revenez quand vous aurez vraiment fini :pirate: .



Maintenant, on doit modifier X et Y en fonction des touches directionnelles, sans oublier les "murs" virtuels :
Secret (cliquez pour afficher)
Code : Axe Parser - Sélectionner
1
2
3
4
5
6
7
8
9
10
:If getKey(2) and (X≠0
:X-1→X
:ElseIf getKey(3) and (X≠91
:X+1→X
:End
:If getKey(4) and (Y≠0
:Y-1→Y
:ElseIf getKey(1) and (Y≠58
:Y+1→Y
:End


En tatonnant vous aurez surement trouvez les valeur 91 (pour la largeur) et 58 (pour la hauteur), qui correspondent à la place que prend la lettre 'O'.

Donc le code final :
Secret (cliquez pour afficher)
Code : Axe Parser - Sélectionner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
:0→X→Y
:.On initialise les variable X et Y à 0 (X = largeur et Y = hauteur)
:
:Repeat getKey(15)
:.ici la boucle repeat sera préférable
:Text(X,Y+6,"     "
:Text(X,Y," O
::If getKey(2) and (X≠0
:X-1→X
:ElseIf getKey(3) and (X≠91
:X+1→X
:End
:If getKey(4) and (Y≠0
:Y-1→Y
:ElseIf getKey(1) and (Y≠58
:Y+1→Y
:End
:End

Q.C.M.

Code : Axe Parser - Sélectionner
1
2
3
4
:Repeat getKey
:getKey→B
:End
:Disp B


Quel est le problème de ce code?
Code : Axe parser - Sélectionner
1
:(getKey(2) and (X≠0))-(getKey(3) and (X≠91))+X→X


Ce code revient-il à celui-ci :

Code : Axe Parser - Sélectionner
1
2
3
4
5
:If getKey(2) and (X≠0
:X-1→X
:ElseIf getKey(3) and (X≠91
:X+1→X
:End
tj
iuy

Statistiques de réponses au QCM


Chapitre précédent Sommaire Chapitre suivant

Informations sur le tutoriel

Retour en haut Retour en haut

Créé : Le 09/10/2010 à 21:19:22
Avancement : 100%
Licence : Copie non autorisée