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