Tutoriel 08
Comportement aléatoire
Nouvelles commandes :
> rand = Donne un nombre
aléatoire > 0 et < 1 [MATH] [<]
[1]
> randInt(Linf,Lsup
= Donne un nombre aléatoire entier entre deux limites [MATH] [<] [5]
Introduction :
Enfin!! Depuis le temps que vous en réviez (n'est-ce pas?)! Nous allons apprendre à faire un jeu (les utilitaires n'utilisents que rarement ces fonctions). Deux commandes similaires à apprendre? Ça va être du gateau ;-)
rand :
Donne un nombre aléatoire entre 0 et 1 (tous deux exclus).
Vous pouvez soit stoquer ce nombre dans une variable, soit
l'utiliser directement comme une variable. Nous allons voir ça
avec un jeu de pile ou face.
Exemple :
:ClrHome Ça fait plus beau!
:rand->A Stoque le nombre
aléatoire dans une variable
:If A<.5 Seulement si le nombre
aléatoire est plus petit que 0.5 (le milieux de 0 et 1 pour des
chances équitables)...
:Disp "PILE" ...Afficher
PILE
:If A>.5 Seulement si le nombre
aléatoire est plus grand que 0.5 (pour des chances
équitables)...
:Disp "FACE" ...Afficher
FACE
On choisit donc un interval de 0 à 0.5 pour PILE et un même
interval de 0.5 à 1 pour FACE. rand est utilisé plusieurs fois
donc nous l'avons au préalable stoquée dans A. À chaque appel
de rand, le nombre est, bien sur, différent.
Note : ici, 0.5 n'est pas pris en compte. pour donner autant de
chance à PILE comme à FACE. Pour les matheux les intervales
sont ]0;0.5[ pour le premier et ]0.5;1[ pour le second (pour les
non-matheux, tous les crochets de ces intervalles signifient que
0 , 0.5 et 1 sont exculs). Si jamais 0.5 est choisi comme nombre
aléatoires (faites une capture d'écran et encadrez-la si ça
arrive ;-) ) alors rien ne s'affichera. Dans ce cas, recommencez!
randInt( :
Donne un nombre aléatoire entier entre une limite inférieur
et une limite supérieur.
Nous allons reprendre le jeu plut grand / plus petit mais pour
jouer seul, cette fois. Nous allons apprendre comment faire.
Programme pour jouer seul :
:ClrHome
:randInt(1,1000)->N Voilà, tout
est dit : Donne un nombre entre 1 et 1000
:Repeat C=N Jusqu'à ce que C=N...
Repeat a été choisi pour exécuter la boucle au moins une fois
:
:Input C ... C est initialisé ici,
demande d'un chiffre
:If C<N:Disp "+GR" Abituel
pour ce jeu : on a déjà vu ça
:If C>N:Disp "+PT" Abituel
pour ce jeu : on a déjà vu ça
:End ...Ici,
grace à la boucle, même pas besoin de tester si le chiffre
donné par le joueur est bon (vous savez pourquoi tout au fond de
vous ;-) ). On gagne ainsi beaucoup d'octets (1 pour Lbl/Goto ; 3
pour le test) : faites le test en utilisant, comme avant, les
étiquettes et le test!
:Disp "BRAVO" Gagné!!
Ce jeu vous permet maintenant de jouer tout seul.
Tricherie : autant que vous l'appreniez maintenant, on peu
tricher dans ce jeu. La fonction Input
accèpte non seulement des valeurs (1, 20 ,25.3 ...) mais aussi
des variables dont elle recale la valeur de cette variable.
Ainsi, à la place d'entrer un nombre, vous pouvez entrer la
variable N. C contiendra alors la valeur de N et le test C=N sera donc vrai : vous aurrez gagné du
premier coup! Il existe un moyen d'empêcher cela mais vous
n'avez pas encore les compétences requises. Plus tard nous
reprendrons cet incontournable exemple pour encore l'améliorer
et en faire une version de plus!
Note : dans vos programmes avec une fonction Input,
vous pouvez utiliser cette technique et donner des variables pour
tester s'ils fonctionnent.
Initialisation de rand :
À chaque exécution de rand ou de
randInt( la TI génère la même
suite de nombres aléatoires.
Pour vous en convaicre, faites ce programme :
Programme :
:Repeat 0 Boucle
pour faciliter la lecture
:Input N Demande
avec quelle valeur rand doit être initialisé
:N->rand Initialisation de rand
:Disp rand Affiche un nombre
alléatoire
:Disp rand Affiche encore un nombre
alléatoire
:Disp rand Et une fois de plus
:End Fin de la boucle
Essayez d'entrer un nombre : vous en aurez trois au hazard.
Rentrez-en un autre : vous en aurez trois autres. Maintenant
remettez le premier et vous aurrez vos trois permiers! Idem pour
le second. La boucle vous permet de rentrer deux fois le même
chiffre et de comparer les trois résultats sur le même écran.
Pour quitter appuyez sur [2nd] [QUIT]. Vous venez d'apprendre
comment il est facile de terminer un programme avec Input. Si quelqu'un le fait
accidentellement, il devra recommencer le programme du début!
Pour en générer une nouvelle il faut stoquer un chiffre dans rand (la valeur réglée en usine est 0).
Ce n'est pas vraiement important mais c'était juste pour que
vous le sachiez. À chaque exécution de programme il est inutile
voir nuisible de réinitialiser rand
(en faissant "rand->rand"
). En outre, cette technique peut être utiliser pour une
sauvegarde de jeu.
Exemple : Vous devez remplire l'écran graphique de points (on
verra comment plus tard) et pouvoir sauvegarder les coordonnées
de ces point pour les réafficher en chargeant le jeu. Voici
comment faire :
Programme :
:ClrDraw Efface
l'écran graphique (on a vu ça au premier tutoriel)
:rand->N Valeur aléatoire pour
initialiser rand
:N->rand Initialisation de rand
avec le chiffre tiré au hazard
:... Ici, routine pour afficher des
points (presque) aléatoirement
:... Jeu en lui même, quel qu'il
soit
:... Maintenant passons au
chargement du jeu
:ClrDraw Efface
l'écran graphique pour charger
:N->rand Initialise rand avec le
même nombre que tout à l'heure...
:... Ici, routine pour afficher les
points qui seront les mêmes que les premiers :
:... La partie est est recharhgée :
vous pouvez continuer à jouer
Conclusion :
Grace à ce tutoriel, nous avons fait un grand pas en avant!
Avant d'attaquer les derniers gros chapitres (perfectionnement
oblige) et de pouvoir enfin créer un bon jeu avec interface
graphique (vous en bavez déjà!) nous allons tester nos connaissances avec une
nouvelle application concrète, histoire de ne pas être
perdu pour la suite et de renforcer les maigres bases que vous
avez duemment assimilées! et oui : le plus dur n'est pas encore
passé...
Retour : Sommaire
Aide : Liste
des commandes
Application 2 : RAPID(getKey))))
Précédent : Tutoriel
07 : Les boucles
Suivant : Tutoriel
09 : Fonctions graphiques