Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RANDOM ET SUPPRESSION


Information sur le tutorial

Catégorie :ActionScripts Date de création : 05/10/2005 19:14:56 Vu : 7 120 fois

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note


Description

Vous avez envie de faire un quizz où les questions tombent aléatoirement ? Mais vous ne voulez pas qu'une question retombe deux fois de suite ? Alors ce tutorial est pour vous.

Tutorial

I. Explications du fonctionnement
II. Applications Action Script

III. Mettre le tout sous la forme d'une fonction
IV. Conclusion


I. Explications du fonctionnement

Si on schématise ce que devra faire le code, on va tomber sur quelque chose comme ça :
- Choisir un élément au hasard
- Supprimer de la liste cet élément.

Pourça il y a plusieurs méthode, mais nous en utiliserons qu'une seuleici,qui est de loin la meilleur. Elle consiste à placer les élémentsdans untableau, choisir aléatoirement un des éléments du tableau, etenfin,supprimer celui-ci du tableau.


II. Applications Action Script

A. Introduction
Avantde commencer, nous allons créer une scène d'exemple, afind'êtred'accord sur les noms que l'on va utiliser. On va donc créer 5objets,contenant chacun une variable "Matiere" (je m'inspire de mes propres matières, je m'excuse d'avance pour ceux qui ont échoué en PCEM1).

Unpetit rappel sur "Comment créer un objet". Il y a plusieur méthode.Soitvous préférez la méthode très propres (un peu trop à mon goût)quiconsiste à créer l'objet, et ensuite à lui assigner des valeurs :
monObjet = new Object();
monObjet.Matiere = "Anatomie";

soitvous préférez la méthode plus classique, plus adapté à notre cas,quiconsiste à créer l'objet directement avec les bonnes valeurs dedans: monObjet = {Matiere:"Anatomie"};
Il faudra bien maîtriser la notation par accolade, qui n'est absolument pas difficile.

Sansplus attendre, voici donc nos 5objets, ce bout de code est à placer surla première frame de notreanimation, dans la fenêtre Action (F9) :

A1 = {Matiere:"Anatomie"};
B1 = {Matiere:"Biochimie"};
C1 = {Matiere:"Biohysique"};
D1 = {Matiere:"Biologie cellulaire"};
E1 = {Matiere:"Physique"};

J'aichoisitvolontairement des noms de variable très différent pour vousmontrerqu'ils importent peu pour faire ce que nous voulons faire.

Maintenantquenos objet sont tous créé, nous allons les mettre dans untableau. Sur la ligne après la définition des objets, vous allerécrire ceci :

Tableau = [A1, B1, C1, D1, E1];

Encore ici, il existe d'autre méthode pour créer le tableau :
Tableau = new Array();
Tableau[0] = A1;
Tableau[1] = B1;
   ...
Tableau[4] = E1;


Ou encore :
Tableau = new Array (A1, B1, C1, D1, E1);

B. Développement
Voilà ! Les préparations sont faites, passons aux choses sérieuses.

Mais d'abord quelques rapelles sur les tableaux. Si vous maîtrisez cette partie, sautez la :)

Untableau fonctionne de la même façon queceux qu'on dessine au CM2.Munissez vous d'un crayon et d'une feuillepour mieux comprendre (enfin,seulement si vous ne comprenez pas hein;) ). Dessinez un tableau. Pasun tableau à double entrée (deuxdimensions), mais un tableaus imple.C'est à dire 2 colonnes et 5lignes. Dans la première colonne, sur lapremière ligne, mettez un 0,puis sur la deuxième ligne un 1, et ainside suite jusqu'à 4.
Sur la deuxième colonne, mettez le nom des objets que nous avons créé plus tôt. C'est à dire : A1, B1, C1, D1 et E1.

Voilà! Votre tableau est fait, et c'est EXACTEMENT à cela qu'ilressembledans Flash. Ainsi, si vous voulez accéder au premier élémentdu tableau,il vous suffira de donner le chiffre de la premièrecolonne, premièreligne. Si vous voulez le dernier élément, prennez lechiffre de lapremière colonne, dernière ligne. C'est aussis simple queça.

Cependant, l'AS ne s'écrit pas comme ça :
jeVeux (Numero:0 De:Tableau);

Ilexiste une notation propre aux tableauxque l'on nomme : notation parcrochet (vous aurez compris qu'elle feraintervenir des crochets).
Ainsi, au lieu du code très malpropre que nous avions au dessus, nous allons écrire :
Tableau[0];

Ce qui est plus "propre", et plus "court" aussi ;).

Pourcréer un tableau à plusieurs dimensions, par exemple 2 (deuxentrées),il suffira de mettre un tableau dans un tableau. Ainsi, onpourra écrire:
Tableau[0][2];
Qui nous donnera la valeur d'un tableau à deux entrés à la première ligne, deuxième colonne.

Onpeut continuer comme ça indéfiniement (dans les limites de lamémoire devotre ordinateur), et faire des tableaux à 3, 4, 5 voir mêmeune dizainede dimensons :
Tableau[0][1]
[4][3][2][7][2][1][2][2];
Mais si vous faites ceci, demandez vous d'abord s'il n'existe pas une meilleur méthode.


Voussavez tout sur les tableaux ? Parfait, continuons, sinon, revoyezlapartie précédente, et référez vous à l'aide de Flash en cas deproblèmes(ou tout simplement à votre réfléxion).

Nous avons un tableau, et nous allons récupérer un de ses éléments de ménière aléatoire :
Tableau[Math.round (Math.random() * (Tableau.length-1))];

Mais quelques explications s'imposent pour les plus débutant :

Premièrent le Math.round() permetd'arrondir le nombre aléatoire (en effet, choisir l'élément dutableauà la ligne un virgule cinq ne voudrait rien dire). Ensuite,lafonctionne Math.random() prendunnombre aléatoire entre zéro et un. Il faut donc multiplié cerésultat(pas encore arrondis) par la longueur du tableau (ici cinq).Maisauparavant, il faudra retrancher 1 à cette longueur, sinon onrisque dedemander le contenu de la sixième colonne (colonne quin'existe pas).Et enfin, une fois fait, on arrondis, et on récupère cequ'il faut.

Si vous ne comprenez pas exactement ces dernièresphrases, relisez les,et faites des testes. C'est le seul moyen que vousavez de progresser.

On récupère une valeur au hasard du tableau,c'est parfait, maiscomment allons nous la supprimer cette valeure, sinous ne savons paslaquelle c'est ? Alors plutôt sur de prendre unnombre aléatoiredirectement entre les crochets, nous allons définir unevariablepréalablement, et s'en servir deux fois :

var r =
Math.round (Math.random() * (Tableau.length-1));

Le "var"permet une fois la boucleterminée (ou la frame passée) de supprimerautomatiquement la variable(elle ne nous servira plus à rien ensuite,alors il faut éviter desaturé la mémoire de flash).

Nous allons créer une autre variable : "rec" qui servira à stocker la valeur du tableau choisit.

var rec = Tableau[r];

Et enfin, il ne reste plus qu'à supprimer du tableau, la valeur sélectionné :

Tableau.splice (r, 1);

Avec splice (indice, nombre).

Et voilà ! Tout fonctionne. Il vous suffit ensuite d'afficher la valeur de "rec" dans la fenêtre de sortie :)

III. Mettre le tout sous la forme de fonction

C'est très intéressant ce petit bout de code une fois compris (je l'éspère). Mais il est inutile servit comme ça.
Le mieux étant de créer une fonction, qui sortira une valeur aléatoire d'un tableau, et qui supprimera celle-ci.

Vousconnaissez les fonctions ? C'est pas très compliqué, nous n'allonspasaller bien loin ici. Une fonction se définit comme ceci :

function NomDeLaFonction (Paramètre1, Paramètre2, ...)
{
    // Code de la fonction
}


Ensuite,une fois la fonction défini, nous pourrons l'appeller autantfois quedésirez en la nommant, et en mettant entre parenthèse lavaleur desparamètres (s'il n'y en a pas, ne rien mettre), exemple :
maFonction (1, 0);

Lafonction va traiter les paramètres (çapeut être un clip, un tableau, unobjet, une truite, ce que vous voulez!), et au final, agir avec unevaleur retourné (vous n'êtes pas obligéde retourner une valeurcependant). Pour cela, il existe un petit outil: return. Exemple :

function Tracer (str)
{
    return (str + " soleil");
}

trace (Tracer ("Coucou");


Ce bout de code retournera dans la fenêtre de sortie : "Coucou soleil".

Nousce n'est pas "Coucou soleil" que nous allons retourner, mais unevaleurdu tableau choisie. Et la fonction ne se contentera pas dechoisir auhasard, elle supprimera l'élément du tableau au passage.

Donnez un nom à votre fonction, par exemple : randel (pour random et delete).
Ilne suffit pas de donner un nom, il faut aussi savoir ce qu'on vapasseren paramètre. Dans notre cas, ce sera le tableau. et riend'autre !

function randel (tab)
{
    var r = Math.round (Math.random() * (tab.length - 1));

    var rec = tab[r];
   
    tab.splice (r, 1);

    return rec;
}

Levar servira ici à supprimer la variable"r" et "rec" une fois lafonction terminée. Le choix aléatoire est bienfait, la suppressionaussi. Et la valeur est bien retournée. Toutfonctionne ! Il ne vousreste plus qu'à tester :)

Voilà l'exemple du tutorial mis en oeuvre :

EXEMPLE EXEMPLE EXEMPLE EXEMPLE EXEMPLE EXEMPLE
function randel (tab)
{
    var r = Math.round (Math.random() * (tab.length - 1));

    var rec = tab[r];
   
    tab.splice (r, 1);

    return rec;
}

A1 = {Matiere:"Anatomie"};
B1 = {Matiere:"Biochimie"};
C1 = {Matiere:"Biohysique"};
D1 = {Matiere:"Biologie cellulaire"};
E1 = {Matiere:"Physique"};

Tableau = [A1, B1, C1, D1, E1];

while (Tableau.length)
{
    var rec = randel(Tableau);
    trace (rec.Nom);
}
EXEMPLE EXEMPLE EXEMPLE EXEMPLE EXEMPLE EXEMPLE

Dans ce code, on aura tout bêtement les matières données, dans un ordre aléatoire, et jamais en double.

Voilà un autre exemple rapide :

EXEMPLE EXEMPLE EXEMPLE EXEMPLE EXEMPLE EXEMPLE
function randel (tab)
{
    var r = Math.round (Math.random() * (tab.length - 1));

    var rec = tab[r];
   
    tab.splice (r, 1);

    return rec;
}

Tableau = new Array();
for (var i=0; i<100; i++)
{
    Tableau[i] = (i+1);
}

while (Tableau.length)
{
    trace (randel(Tableau));
}
EXEMPLE EXEMPLE EXEMPLE EXEMPLE EXEMPLE EXEMPLE

Ceboutde code (ne sert à rien, oui je sais, merci pour la remarque),vadéfinir un tableau avec dedans tous les nombres de un à cent.Puis,dans une boucle while (tant que la longueur du tableau estdéfini,c'est à dire différente de undefined et de 0) va afficher dans la fenêtre de sortie la valeur retournée par la fonction randel.

IV. Conclusion

J'éspèreque ce petit bout de code, très simple à comprendre vous auraaidé, etj'éspère surtout, ne plus revoir une question de ce genre surle forum :)

Bonne chance à vous, et faites marchez vos méninges, c'est ce qu'il y a de mieux, et loin devant les tutoraix !
05 octobre 2005 19:16:59 :
// Tentative de correction de mise en page toute gâchée... sniff..
signaler à un administrateur
Commentaire de Babaaar le 09/10/2005 14:32:45

Sympa ton tutorial, merci bp !

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Appels d'offres



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,031 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.