Mais comment effacer l'écran d'un coup ? comment créer un nombre aléatoire ?
J'allais vous le dire

.
Pour effacer l'écran, vous utiliserez la commande
ClrHome :

.
Pour créer un nombre aléatoire, il faudra utiliser la commande
rand. Celle-ci va créer un nombre aléatorie entre 0 et 65 535.

Mais comment faire pour que ce nombre soit entre 0 et 9 ?
C'est la qu'intervient le super modulo

, cette tache fait partie de ses spécialités :
Code : Axe Parser - Sélectionner
Et en simplifier :
Code : Axe Parser - Sélectionner
En faite, le reste de la division euclidienne de n'importe quel entier par 10, sera toujours comprit entre 0 et 9 (car 10 est divisible par 10), de même si je veut créer un nombre aléatoire entre 0 et 95 :
Code : Axe Parser - Sélectionner
Pour le reste vous savez faire (si si, je vous assure !

). Sur ce, prenez bien votre temps pour faire ce TP, (plusieurs jours/semaines si il faut), et lisez la suite
SEULEMENT quand vous aurez fini.
Mais n'hésitez pas à relire les chapitres précédents pour vous aider.
Après avoir amélioré votre programme mieux que je le ferais, vous venez ici pour voir ma modeste correction
Commençons par le commencement : il vous faut un menu qui réagisse en fonction des touches choisis.
Ici j'ai choisi la touche

pour jouer,

pour le crédit et

pour quitter :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| :.PLUIENUM
:.Le menu principale
:Repeat getKey(15)
:Text(20,10,"2nd : Jouer
:Text(20,20,"Alpha : Credits
:Text(20,30,"Clear : Quitter
:
:If getKey(54)
:.Mes fonctions de jeu
:End
:
:If getKey(48)
:.Le credit du jeu
:End
:End |
Il n'y a pas de suprise, tout ça a déjà été vu.
Les caractère avec accent (é, à, ê, ë, etc.) ne sont pas mis ici car la calculatrice ne les reconnais pas dans ce cas la.
Ensuite je fait mon crédit, qui revient au menu après avoir appuyer sur la touche

:
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
9
| :ClrHome
:Text(0,0,"Jeu Creer par
:Text(0,8,"Kindermoumoute
:Text(0,16,"Octobre 2010
:Text(0,30,"Merci a Wag1 pour la
:Text(0,38,"correction de ce tutoriel
:Repeat getKey(9)
:End
:ClrHome |
J'efface l'écran au début et à la fin de mon crédit, via la commande
ClrHome vu plus haut. Et j'attend que la touche

à été pressé avec une boucle avec rien dedans.
Passons aux choses serieuses.
D'abord, comment choisir un nombre aléatoire :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
| :!If T
:rand^10→N
:1→T
:End |
Il suffira de donner 0 comme valeur à T pour créer un nouveau nombre aléatoire (entre 0 et 9) dans la variable N (avec la commande
rand vu plus haut).
Ensuite, pour savoir si la touche pressé correspond avec ce nombre N, on peut faire :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
| :If getKey(33) and (N=0)
:1→I+S→S
:ElseIf getKey(34) and (N=1)
:1→I+S→S
[etc]
:Else getKey(20) and (N=9)
:1→I+S→S
:End |
Quand une touche correspond à N, on rajoute 1 à I (devient VRAI), puis met la valeur I+S (1+S) dans la variable S. La variable I va servir à initialiser le numéro, et la variable S va être la somme des points.
Cependant, comme vu dans le QCM précédent, on peut simplifier ce code :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
9
10
| :getKey(33) and (N=0)→I
:getKey(34) and (N=1)+I→I
:getKey(26) and (N=2)+I→I
:getKey(18) and (N=3)+I→I
:getKey(35) and (N=4)+I→I
:getKey(27) and (N=5)+I→I
:getKey(19) and (N=6)+I→I
:getKey(36) and (N=7)+I→I
:getKey(28) and (N=8)+I→I
:getKey(20) and (N=9)+I→I+S→S |
Comme N n'aura q'une valeur à chaque fois, il n'y a pas de risque que I sois égale à 2 ou plus.
Attention, il ne faut pas oublier le +I dans les calcules, ou sinon la variable I sera toujours remit à zéro la ligne suivante (sauf pour 9)
Et encore amélioré

:
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
| :(getKey(33) and (N=0)) or (getKey(34) and (N=1)) or (getKey(26) and (N=2)) or (getKey(18) and (N=3)) or (getKey(35) and (N=4)) or (getKey(27) and
(N=5)) or (getKey(19) and (N=6)) or (getKey(36) and (N=7)) or (getKey(28) and (N=8)) or (getKey(20) and (N=9))→I+S→S |
Ce code tiens sur une seule ligne !
Mais dans ce code il suffirait d'appuyer sur toutes le touches en même temps pour pulvériser les scores :p, donc je suis obligé de mettre un code antitriche :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
| :(getKey(33) xor getKey(34) xor getKey(35) xor getKey(36) xor getKey(26) xor getKey(27) xor getKey(28) xor getKey(18) xor getKey(19) xor getKey(20))
and ((getKey(33) and (N=0)) or (getKey(34) and (N=1)) or (getKey(26) and (N=2)) or (getKey(18) and (N=3)) or (getKey(35) and (N=4)) or (getKey(27) and
(N=5)) or (getKey(19) and (N=6)) or (getKey(36) and (N=7)) or (getKey(28) and (N=8)) or (getKey(20) and (N=9)))→I+S→S |
Le ou exclusif (
xor) va obliger qu'une seule touche sois pressé. Quand celui-ci retourne 1 (VRAI), on regarde si il y a également une touche correspondant à la valeur de N. Si il y en a une, alors I=1 (VRAI), et on incrémente S bien entendu.
On affiche N, qui descend de l'écran plus ou moins rapidement :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
| :Text(40,B,N►Dec
:Pause W
:B+1→B |
Maintenant, on va utiliser la variable I, qui détecte quand une touche correspond à N. Quand I est égale à 1, la vitesse du jeu doit augmenter, le numéro déjà à l'écran doit s'effacer, . :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
9
10
11
12
| :Text(40,B,N►Dec
:If I
:If W>1
:W-1→W
:End
:ClrHome
:0→I→T→B
:.T=0, on recréer un nombre aléatoire
:.B=0, N est affiché en haut de l'écran
:End
:Pause W
:B+1→B |
Toute la partie de jeu :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| :.On initialise nos variables (ici le temps W commence à 100 ms)
:0→I→T→B+100→W
:.On efface le menu précedent
:ClrHome
:
:.Le jeu commence, et s'arrête quand la lettre touche le bas de l'écran
:Repeat B=60 or getKey(15)
:.On choisi un nombre N aléatoire
:!If T
:rand^10→N
:1→T
:End
:.On affiche N en en fonction de B
:Text(40,B,N►Dec
:.On vérifie si la touche pressé correspond à N (avec un code anti-triche)
:(getKey(33) xor getKey(34) xor getKey(35) xor getKey(36) xor getKey(26) xor getKey(27) xor getKey(28) xor getKey(18) xor getKey(19) xor getKey(20)) and ((getKey(33) and (N=0)) or (getKey(34) and (N=1)) or (getKey(26) and (N=2)) or (getKey(18) and (N=3)) or (getKey(35) and (N=4)) or (getKey(27) and (N=5)) or (getKey(19) and (N=6)) or (getKey(36) and (N=7)) or (getKey(28) and (N=8)) or (getKey(20) and (N=9)))→I+S→S
:.Si sa correspond on initialise les variables, et le temps W diminue
:If I
:If W>1
:W-1→W
:End
:ClrHome
:0→I→T→B
:End
:
:Pause W
:B+1→B
:End
:.On efface l'écran
:ClrHome
:.Le score s'affiche dans le menu principale
:Text(0,0,"Score :
:Text(26,0,S►Dec |
Vous avez fini votre programme, mais deux forces en vous se combattent encore : Le
bien et le
mieux 
.
Ici je montrerais 3 amélioration pour rendre votre jeu un peu mieux (mais il n'y a jamais de limite dans les améliorations) :
- Faire une intro au début du programme (histoire de rendre le jeu dynamique).
L'intro que j'ai choisi de faire fait défiler le titre du jeu de gauche à droite, et fait apparaître très brièvement des tas de numéros sur l'écran

, mais ce n'est qu'un exemple, et vous êtes libre de faire l'intro que vous voulez :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
9
10
11
| :For(Z,0,60)
:ClrHome
:Text(Z,2," PLUIE
:Text(Z,10," DE
:Text(Z,18," NUMERO
:Text(rand^92,Z-(rand^45→B),rand^7→A►Dec
:Text(rand^92,Z+(B-5),A+1►Dec
:Text(rand^92,Z-(B+7),A+2►Dec
:Text(rand^92,Z+(B-7),A+3►Dec
:End
:ClrHome |
Lorsque l'on utilise la commande
ClrHome pour effacer l'écran constament dans une boucle, le bas de l'écran sera plus clair (gris clair) et le haut plus foncé (gris noir) lors de l'affichage du texte.
Pour limiter les rand (qui ralentissent fortement le programme), j'ai mis dans des variables temporaires B et A qui seront dans tous les cas initialisé par la suite.
- Faire apparaître les numéro à des endroits choisi au hasard.
Il suffit de rajouter une variable A lors de l'affichage du texte
Text(A,B,N►Dec qui sera choisi au hasard dans notre fonction déjà présente :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
| :!If T
:rand^10→N
:rand^92→A
:1→T
:End |
- Faire un mode difficile (en faisant défiler plusieurs numéro en même temps par exemple).
Dans mon exemple, il y a le niveau 0 (avec 1 numéro) et le niveau 1 (avec 2 numéro)
Le but va être de rajouter un deuxième numéro, sans que cela perturbe le premier code. On va donc être obliger de recopier le même code mais avec des noms de variables différentes. Il faudra que ce code soit pris en compte seulement lorsque le joueur l'a choisi (via un menu) :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
| :ClrHome
:Repeat getKey(9)
:Text(0,10,"Niveau :
:Text(28,10,L►Dec
:(getKey(4) and (L<1))-(getKey(1) and (L>0))+L→L
:End |
Bien sur vous êtes incollable sur l'incrémentation et la décrémentation, ce code n'a rien de difficile à vos yeux
Maintenant on reprend toutes les fonctions de notre premier code, mais avec d'autres variable, et seulement si il y a L :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| :Repeat Y=60 or (B=60) or getKey(15)
:...
:If L
:!If U
:rand^10→M
:rand^92→X
:1→U
:End
:End
:...
:If L
:Text(X,Y,M►Dec
:End
:If getKey(33) xor getKey(34) xor getKey(35) xor getKey(36) xor getKey(26) xor getKey(27) xor getKey(28) xor getKey(18) xor getKey(19) xor getKey(20)
:.Ici on laisse la condition, car ça raccourci le code, vu que l'on a 2 fois le code, mais avec N et devient M
:If L
:(getKey(33) and (M=0)) or (getKey(34) and (M=1)) or (getKey(26) and (M=2)) or (getKey(18) and (M=3)) or (getKey(35) and (M=4)) or (getKey(27) and (M=5)) or (getKey(19) and (M=6)) or (getKey(36) and (M=7)) or (getKey(28) and (M=8)) or (getKey(20) and (M=9))→J+S→S
:End
:End
:...
:If J
:If W>1
:W-1→W
:End
:ClrHome
:0→J→U→Y
:End
:...
:If L
:Y+1→Y
:End |
Le code final :
Secret (cliquez pour afficher)Code : Axe Parser - Sélectionner1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
| :.PLUIENUM
:
:.Une petite intro pour le fun
:For(Z,0,60)
:ClrHome
:Text(Z,2," PLUIE
:Text(Z,10," DE
:Text(Z,18," NUMERO
:Text(rand^92,Z-(rand^45→B),rand^7→A►Dec
:Text(rand^92,Z+(B-5),A+1►Dec
:Text(rand^92,Z-(B+7),A+2►Dec
:Text(rand^92,Z+(B-7),A+3►Dec
:End
:ClrHome
:0→S→I→J→T→U→A→B→X→Y+1→L→W
:
:.Le menu principale
:Repeat getKey(15)
:Text(20,10,"2nd : Jouer
:Text(20,20,"Alpha : Credits
:Text(20,30,"Clear : Quitter
:
:.Mes fonctions de jeu
:If getKey(54)
:ClrHome
:.Choix niveau
:Repeat getKey(9)
:Text(0,10,"Niveau :
:Text(28,10,L►Dec
:(getKey(4) and (L<1))-(getKey(1) and (L>0))+L→L
:End
:100→W
:0→S
:ClrHome
:
:Repeat Y=60 or (B=60) or getKey(15)
:!If T
:rand^10→N
:rand^92→A
:1→T
:End
:If L
:!If U
:rand^10→M
:rand^92→X
:1→U
:End
:End
:Text(A,B,N►Dec
:If L
:Text(X,Y,M►Dec
:End
:If getKey(33) xor getKey(34) xor getKey(35) xor getKey(36) xor getKey(26) xor getKey(27) xor getKey(28) xor getKey(18) xor getKey(19) xor getKey(20)
:(getKey(33) and (N=0)) or (getKey(34) and (N=1)) or (getKey(26) and (N=2)) or (getKey(18) and (N=3)) or (getKey(35) and (N=4)) or (getKey(27) and (N=5)) or (getKey(19) and (N=6)) or (getKey(36) and (N=7)) or (getKey(28) and (N=8)) or (getKey(20) and (N=9))→I+S→S
:If L
:(getKey(33) and (M=0)) or (getKey(34) and (M=1)) or (getKey(26) and (M=2)) or (getKey(18) and (M=3)) or (getKey(35) and (M=4)) or (getKey(27) and (M=5)) or (getKey(19) and (M=6)) or (getKey(36) and (M=7)) or (getKey(28) and (M=8)) or (getKey(20) and (M=9))→J+S→S
:End
:End
:If I
:If W>1
:W-1→W
:End
:ClrHome
:0→I→T→B
:End
:If J
:If W>1
:W-1→W
:End
:ClrHome
:0→J→U→Y
:End
:Pause W
:B+1→B
:If L
:Y+1→Y
:End
:End
:ClrHome
:Text(0,0,"Score :
:Text(26,0,S►Dec
:0→I→J→T→U→A→B→X→Y+1→L→W
:End
:
:.Le credit du jeu
:If getKey(48)
:ClrHome
:Text(0,0,"Jeu Creer par
:Text(0,8,"Kindermoumoute
:Text(0,16,"Octobre 2010
:Text(0,30,"Merci a Wag1 pour la
:Text(0,38,"correction de ce tutoriel
:Repeat getKey(9)
:End
:ClrHome
:End
:End |
Lien de téléchargement (source et exécutable) :
LIEN
Petit screenshot :
