Forums Développement Multimédia

Aller au contenu

Un petit jeu pour mes élèves

CODE Actionscript

17 réponses à ce sujet

#1 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 17 June 2013 - 14:57 PM

Bonjour à tous, je suis instituteur en école primaire et je m'efforce de faire des choses un peu plus ludique pour qu'ils apprennent à compter !

Je suis en train de faire une petite application sur flash, mais je ne suis pas développeur a la base.
Je me retrouve donc confronté a un problème.

Mon jeu est simple, on a trois colonnes, Une pour les centaines, une autre pour les dixaines, une autre pour les unités. Respectivement j'ai dessiné, 10coffre pour les centaines, 10lingots pour les dizaines 10pépites pour les unités.

J'ai commencé a réalisé les drags and drop pour que les petits puissent les glisser dans les bonne colonne. Mais voila, je pense que mon code est un peut lourdingue ! C'est pour quoi j'aurais besoin de votre aide. Tout mes coffre, lingots, pépite son numéroter de 0 à 9.


stage.addEventListener(Event.ENTER_FRAME, letUnite3);
function letUnite3(e:Event):void{
if (unite0.hitTestObject(zoneUnite) &&
unite1.hitTestObject(zoneUnite) &&
unite2.hitTestObject(zoneUnite)){
compteurUnite.text = ("3");
}
}
 

Voici un extrait de mon code, cela s'active quand j'ai placé 3 pépite ( unité ) dans la bonne colonne.
j'ai donc un champs textField, qui me confirme que j'ai belle est bien 3 pépites. Dans un second temps, j'ai 10 étiquettes, avec les chiffre de 0 à 9. en dessous de chaque colonne je voulais faire une case, ou l'élève pouvait glisser déposer le bon chiffre. Le problème c'est que je n'arrive pas a voir comment je peux faire marché le chiffre du texte field, ( 3 pour l'exemple ) avec l'étiquette avec le bon numéro.

Je ne sais pas si je suis très clair ! mais n'étant pas développeur de formation, je tâtonne pas mal !

Si quelqu'un à un petit peu compris mon idée ! Je serais preneur !

Bien Cordialement,
Clément.

#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 17 June 2013 - 15:30 PM

Bonjour mr dodo.

Je n'ai pas très bien compris l'expérience utilisateur (disons la règle du jeu).

Si tu pouvais faire une copie d'écran d'une partie en cours, ça nous permettrais peut-être de mieux te suivre.

#3 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 17 June 2013 - 15:39 PM

Merci dldler ! Alors voici une capture d'écran, ça sera peut être plus simple en effet.

Donc mes 10 coffres, sont tous les un au dessus des autre pareil pour les lingots et pépite.

le carré gauche en bas a droite est temporaire, c'est le bouton que j'utilise pour tester mes validations. Et le carré rouge en dessous des ombre de cloffre est l'endroit ou on doit placer les bonne étiquette "chiffre".

La regle du jeu est a double entré en faite, soit je pourrais déposé les chiffre en dessous des colonnes et les élève devront placer le bon nombre dans chaque colonne, soit l'inverse.

Je sais pas si c'est plus clair en tout cas merci !

Clément.

Miniature(s) jointe(s)

  • Image attachée: Capture d’écran 2013-06-17 à 16.32.38.png


#4 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 17 June 2013 - 16:46 PM

Salut,

Ton jeu semble tout à fait adapté à une conception en grilles.
A savoir trois grilles de X colonnes et Y lignes chacune.

Plus qu'une capture, je vais te demander le FLA (ou un FLA simplifié) si cela est possible.
J'aimerai voir la construction que tu as adopté pour le moment et te proposer une version avec grilles.
Et ce avant de se lancer dans des explications qui seront à mon avis plus cohérentes et simples à partir d'un exemple.

Pour te rassurer, je pense que ce n'est pas bien compliqué à gérer, mais ce sera plus parlant avec un exemple ;-)

Bon courage.

#5 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 17 June 2013 - 17:34 PM

Bonjour Monsieur Spi, tu me rassures un peu ! Je te mets en piece jointe mon fichier, On ne se moque pas hein !

D'avance merci pour vos aides !

Clément.

Fichier(s) joint(s)

  • Fichier joint  Pirate.fla   1.39 Mo   12 téléchargement(s)


#6 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 17 June 2013 - 17:44 PM

Re,

Ok vu, tu t'es méga pris la tête....
Laisses moi quelques heures et je te fais un petit modèle beaucoup plus simple à prendre en main et qui je l'espère corrigera ton soucis.

#7 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 17 June 2013 - 17:45 PM

hahaha merci c'est ADORABLE monsieur Spi, en effet je me suis bien pris la tête ! Heuresement que la fonction Remplace existe ! Mais c'était quand même bien lourds ! Je me doutais bien qu'il y avait un truc plus simple ! Mais impossible a trouver.

D'avance merci.

#8 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 17 June 2013 - 17:55 PM

Petite question, peux-tu donner les règles précises de ton jeu ?
A savoir que tu va de toute façon devoir les expliquer à tes élèves, il faut donc quelles soient simple et facile à comprendre.
Afin que je puisse reconstruire l'interactivité j'ai moi aussi besoin de comprendre ces règles et pour le moment ce n'est pas le cas.

Peux-tu donc me donner avec exactitude (comme tu le ferai pour tes élèves) les règles du jeu et ce qu'ils doivent faire ?

#9 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 17 June 2013 - 18:09 PM

Re- bonjour,

Alors les règles sont les suivantes.

-Soit, je place une collection de pépites par une action de drag and drop un certain nombre de coffres, lingots, pépites dans chaque espace. Les élèves doivent placer le chiffre correspondant au nombre de pépites dans l’espace dédié ( les case en dessous des colonnes, a l'aide des case chiffre")
-
-Soit, j'inscrit directement un nombre de pépites dans l’espace dédié ( toujours grace a mes petites étiquette ) et ensuite les élèves constituent la collection demandée à l’aide des coffres, des lingots et des pépites.

Pour le cas numéro 1,

Je place Trois coffres, deux lingot, 3 pépite. L'élève devra placer, le 3 sous les coffres, le deux sous les lingots, et le trois sous les pépites.
Un bouton servira a validé, pour savoir si on a réussi ou pas. Si il y a une erreur, le chiffre et les pépites reviennent a leur place initial.

Pour le cas numéro 2,

Je place 3 , 2 , 3 en dessous des colonnes, et les élèves devront placé le bon nombre de pépite and co !

Je sais pas si je suis très clair !
En tout cas merci de ton aide.

Clément.

#10 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 17 June 2013 - 18:22 PM

Citation

Je sais pas si je suis très clair !

Non ;-)

Et cela est un gros problème pour deux raisons, la première c'est que expliqué comme ça tes élèves ne comprendront rien, c'est pour ça que je t'ai demande de me l'expliquer comme tu le ferait avec tes élèves et non pas comme toi tu vois la chose de ton côté développeur du jeu. L'autre c'est que ce qui s’énonce clairement est généralement compris, si tu ne peux pas expliquer clairement à quelqu'un ce qu'il doit faire dans ton jeu alors tes idées en sont pas claires et tu aura du mal à coder ton jeu, tu vois où je veux en venir ?

Donne moi un énoncé clair que tes élèves peuvent comprendre du premier coup, et là j'aurai les règles à appliquer pour faire correspondre ton jeu à ce que tu souhaite.

#11 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 17 June 2013 - 18:56 PM

Re,

Alors voici une toute première version simple, c'est très brouillon et il n'y a que quelques fonctionnalités de base et pas de décor, c'est juste pour montrer la mécanique.

Il est possible de simplifier encore mais je préfère que ça reste lisible pour le moment.
Jettes-y un oeil et dis moi si ça te parle ou si tu as besoin d'infos par rapport au code.
Je préfère que tu étudie la chose avant de me lancer dans les explications pas à pas.

J'attends les règles du jeu précises avant d'aller plus loin.
(en fait je crois avoir compris mais c'est pour te forcer à bien formuler car c'est ça qui va te permettre de bien rédiger ton code).

Fichier(s) joint(s)



#12 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 17 June 2013 - 19:55 PM

Et voilà le jeu complet si j'ai bien compris les règles.

On a deux types de jeux.

Type 1 :
on affiche des chiffre sous chaque grille
le joueur doit placer autant d'objet que de chiffre dans chaque grille
le joueur clique sur le bouton valider pour vérifier le résultat

Type 2 :
on affiche X objets dans chaque grille
le joueur doit saisir le nombre d'objet dans un champ texte pour chaque grille
le joueur clique sur le bouton valider pour vérifier le résultat.

Technique :
Dans le code, tu as une variable qui s'appelle "typeDeJeu", elle te permet de choisir le type de jeu souhaité (1 ou 2).
Si on est dans le cas du jeu 2, les champs de saisie sont ceux de la deuxième ligne de champs texte.
Dans le code tu trouvera aussi un tableau nommé "solution", il te suffit de choisir un chiffre par index du tableau pour que selon le type de jeu tu affiche le nombre d'objets correspondant dans les grilles (jeu 2) ou que ce soit la solution à trouver (jeu 1).

Pour le reste je te laisses lire le code pour voir comment ça fonctionne, puis on peut étudier ça pas à pas tout à l'heure si tu as des difficultés (là je vais aller manger).

Bon courage.


[EDIT] j'ai fait ça vite donc c'est un peu crade et pas super optimisé, mais c'est pour montrer, si tu choppe le principe et que ça t'intéresse d'aller plus loin je nettoierai un peu le tout ;-)

Fichier(s) joint(s)



#13 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 17 June 2013 - 21:30 PM

En effet ce n'est pas facile à mettre sur papier, c'est quand même plus simple dans le feu le l'action en classe !

Je ferais en faite passer une élève au tableau, je placerais un nombre de pépite dans la colonne des pépite, ( disons nous que je place 4 pépite)
Après je demanderais à l'élève de mettre dans la case prévu à cette effet le chiffre correspondant au nombre de pépite. Ensuite je placerais des lingots. Même principe je demanderais à l'élève de placer le chiffre en dessous de la colonne.
Pareil pour les coffres ( centaine). Une fois que l'élève aura placer tout les chiffre en dessous des colonnes, je lui demanderais de valider sa réponse pour voir si il a bon. Je pensais un code couleur pour les bonne ou mauvaise réponse ! C'est vraiment pas facile à dire comme cela à l'oral ! Si tu veux je peux te joindre un ppt. Qu'on a mît au point avec l'équipe pédagogique. Ce sera peut être plus parlant !!! En tout cas merci de tes réponses !

Clément

#14 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 17 June 2013 - 21:35 PM

J'ai regarde rapidement( je n'étais pas chez moi ) tu m'as l'air d'avoir très bien compris l'idée ! Je regarde le code des que j'arrive chez moi.

Par contre petit détail le textfield que j'avais mît en place, était temporaire, c'était simplement pour voir si mon truc marchait !!!

En tout cas je tiens à te remercier de prendre du temps pour m'expliquer de façon pédagogique ! L'entre aide se fait de plus en plus rare je trouve. Et c'est toujours un plaisir de tomber sur des gens comme toi !

#15 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 17 June 2013 - 21:50 PM

Citation

Par contre petit détail le textfield que j'avais mît en place, était temporaire, c'était simplement pour voir si mon truc marchait !!!
Je te rassure, ce que j'ai fait n'est qu'un brouillon pour donner une piste, ce sera à toi de refaire le jeu avec cette nouvelle approche si le coeur t'en dit.

Citation

En tout cas je tiens à te remercier de prendre du temps pour m'expliquer de façon pédagogique ! L'entre aide se fait de plus en plus rare je trouve. Et c'est toujours un plaisir de tomber sur des gens comme toi !

Pas de problème, c'est mon rôle et j'ai du temps en ce moment ;-)
Merci à toi.

Bon courage.

#16 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 18 June 2013 - 13:39 PM

Bonjour Monsieur Spi !

Alors j'ai bien regardé ton code, j'arrive à peu près a comprendre l'ensemble ( bien que j'aurais été incapable de l'écrire ! ). Mais déjà rien qu'avec ce code tu m'as appris beaucoup de chose !
Par contre je n'arrive pas a voir a quel endroit tu détermines les emplacements ou seront affiché les cases. Ni même comment apparait le filet noir autour des cases ! Si j'ai bien compris hub, est la zone ou se trouve les cases de saisie ?

Merci de tes réponses en tout cas ! Je modifie un peu ton code a ma sauce ! Pour essayé de collé au mieux a mon idée et je reviens vers toi !
Clément.

EDIT: J'ai trouvé ! j'étais tellement perturbé car il n'y avait rien sur la scène que j'ai oublié d'en regarder le contenu de la bibliothèque !

EDIT 2: Lorsque j'export mon fichier, les case de saisie de texte sont déjà rempli avec des chiffres, je n'arrive pas a voir quel partie du code provoque cela.

#17 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 18 June 2013 - 14:42 PM

Re,

Alors pour les explications, en effet il n'y a plus rien sur la scène, j'utilise des objets exportés pour AS depuis la bibliothèque, c'est ainsi plus facile à manier avec le code (pour faire simple).

Voyons vite fait le code, tout commence par la déclaration des variables globales (utiles partout dans le code) :


var i:int;
var j:int;
var T:int = 77;
 

"i" et "j" sont des pointeurs qui sont utilisés dans les boucles, on les déclare juste une fois au début et on donne leur type (int = entier).
"T" correspond à la taille d'une tuile (ou case de tes grilles).
Chaque "tuile" est un clip composé de 6 frames, les 3 premières représentent chaque objet "vide" (juste son ombre), les trois suivantes représente les mêmes objets mais cette fois pleins.

Je crée ensuite les objets dont j'ai besoin, attention il s'agit d’occurrences des objets se trouvant en bibliothèque, donc des copies.

var oeuf:Oeuf = new Oeuf();
var lingo:Lingo = new Lingo();
var coffre:Coffre = new Coffre();
var hud:Hud = new Hud();

Notes que j'ai ajouté un objet nommé "hud", c'est un clip qui contient tout ce qui sert à l'interface, à savoir les champs textes et les boutons, autant tout rassembler à un seul endroit.

Je vais avoir besoin de stocker mes objets quelque part pour y accéder plus facilement et faire des traitements dessus (tris, mélanges, ciblage, etc...), et le plus pratique pour faire ça ce sont les tableaux, je vais donc créer des tableaux de stockage :

var stockCoffres:Array = [];
var stockLingos:Array = [];
var stockOeufs:Array = [];
var stock:Array = [stockCoffres,stockLingos,stockOeufs];

Chaque tableau est sensé stocker les objets qui se trouvent dans mes grilles (donc chaque case de chaque grille), et j'en ai un dernier "stock" qui stocke les trois tableaux précédents (on dit alors que c'est un tableau à deux dimensions, ou tableau de tableaux).

Pour en finir avec la déclaration des variables et objets je vais créer deux nouvelles variables :

var solution:Array = [3,2,5];
var typeDeJeu:int = 2;

La première est un tableau où je stocke la solution au problème.
La seconde correspond au type de jeu que je souhaite afficher.

Pour savoir ce dont tu as besoin, il faut commencer par créer ton jeu sur papier et en décrire précisément les mécanismes et les règles, c'est pour ça que je t'avais demandé de me donner des règles précises. Lorsque tout ça est bien clair tu sais exactement ce dont tu va avoir besoin et tu peux en déduire les variables et objets utiles comme on vient de le faire.

Passons à la mécanique à présent.

// lance le programme
init();

Il s'agit du point d'entrée du programme, il faut bien commencer quelque part, je vais donc utiliser une fonction "init" que je pourrais appeler quand je veux pour démarrer le jeu, par exemple au départ, mais aussi lorsque le jeu est terminé et que je veux le relancer.

// initialiser le jeu
function init():void{
       
        // crée les trois grilles d'objets
        creeGrille(300,50,1);
        creeGrille(500,50,2);
        creeGrille(700,50,3);
       
        // enregistre la position des objets
        coffre.posx = 50;
        coffre.posy = 100;
        lingo.posx = 50;
        lingo.posy = 150;
        oeuf.posx = 50;
        oeuf.posy = 200;
       
        // place les objets
        coffre.x = coffre.posx;
        coffre.y = coffre.posy;
        lingo.x = lingo.posx;
        lingo.y = lingo.posy;
        oeuf.x = oeuf.posx;
        oeuf.y = oeuf.posy;
        hud.x = 300;
        hud.y = 500;
       
        // enregistre un identifiant pour chaque objet
        coffre.id = 0;
        lingo.id = 1;
        oeuf.id = 2;
       
        // écouteurs des objets
        coffre.addEventListener(MouseEvent.MOUSE_DOWN, attrape);
        lingo.addEventListener(MouseEvent.MOUSE_DOWN, attrape);
        oeuf.addEventListener(MouseEvent.MOUSE_DOWN, attrape);
        coffre.addEventListener(MouseEvent.MOUSE_UP, relache);
        lingo.addEventListener(MouseEvent.MOUSE_UP, relache);
        oeuf.addEventListener(MouseEvent.MOUSE_UP, relache);
       
        // affichage de la main au survol des objets
        coffre.buttonMode = true;
        lingo.buttonMode = true;
        oeuf.buttonMode = true;
               
        // affichage des objets
        addChild(oeuf);
        addChild(lingo);
        addChild(coffre);
        addChild(hud);
       
        // écouteur sur le bouton valider du hud
        hud.valider.addEventListener(MouseEvent.CLICK, valider);
        hud.valider.buttonMode = true;
       
        // choisir le type de jeu
        typeJeu(typeDeJeu);

}

Cette fonction commence par créer trois grilles (on verra le code par la suite).
Elle enregristre ensuite la position des objets qui servirons au drag & drop, en utilisant une petite variable au sein de ces objets.
Elle place ces objets en se servant de la variable qu'on vient d'enregistrer.
Elle ajoute un identifiant (lui aussi dans une petite variable interne à l'objet) qui servira à reconnaître l'objet utilisé.
Elle ajoute à chacun de ces objets des écouteurs d'événements pour le drag & drop (toujours le même pour tous les objets).
Elle ajoute un petit effet pour que la main s'affiche au survol des objets.

Puis elle affiche dans l'ordre chaque objet (elle les pose sur la scène si tu préféres).
Elle rajoute l'écouteur pour le bouton "valider" qui se trouve dans l'objet "hud".

Et pour finir elle choisi le type de jeu en fonction du type que tu as renseigné au départ.

A partir de là le jeu est en place, reste à voir plusieurs choses, la première c'est comment les grilles sont créés, dans la fonction "init" j'utilise :

        // crée les trois grilles d'objets
        creeGrille(300,50,1);
        creeGrille(500,50,2);
        creeGrille(700,50,3);
       

Donc j'appelle une fonction "creeGrille" à laquelle je passe trois paramètres : (position sur X, position sur Y, référence de l'objet à afficher).
Comment est faite cette fonction ?

// créer les grilles
function creeGrille(X:int,Y:int,id:int):void{
        for (i=0; i<2; i++){
                for (j=0; j<5; j++){
                        var t:Tuile = new Tuile();
                        t.x = i*(T+10)+X;
                        t.y = j*(T+10)+Y;
                        t.gotoAndStop(id);
                        addChild(t);
                        if(id == 1) stockCoffres.push(t);
                        if(id == 2) stockLingos.push(t);
                        if(id == 3) stockOeufs.push(t);
                }
        }
}

Je fais une première boucle de 0 à 2, donc deux itérations (0 et 1), elle correspond aux deux colonnes dont j'ai besoin pour construire la grille.
Dans cette boucle, pour chaque itération je fais une nouvelle boucle de 0 à 5, donc ici on traite les lignes de la grille.
Pour chaque case ainsi obtenue, je crée une nouvelle tuile (occurence de l'objet Tuile de la bibliothèque).
Je lui donne sa position grâce au pointeur des boucles (i et j) multiplié par la taille de la tuile (T) à laquelle j'ajoute 10 pour avoir un espace entre les tuiles et la position de départ (X et Y) sur chaque axe, si tu décompose c'est une simple formule de maths.
Ensuite je demande à la tuile que je viens de créer d'afficher la frame du clip correspondant à l'objet que je veux afficher (identifié par "id"), pour le coffre vide l'id est 1, pour le lingo vide l'id est 2 et pour la pépite l'id est 3.
Enfin j'ajoute la tuile que je viens de créer à la liste d'affichage (je la pose sur la scène).
Reste les trois dernières lignes, selon l'objet je le range dans le tableau de stockage correspondant tout simplement.

Ok les trois grilles sont créées, voyons ce qui se passe quand on choisi le type de jeu.

//initialiser en fonction du type de jeu
function typeJeu(type:int):void{
       
        // si type de jeu 1 affiche le nombre d'objets a placer
        if(type==1){
                hud.cibleC.text = solution[0];
                hud.cibleD.text = solution[1];
                hud.cibleU.text = solution[2];
        }
       
        // si type de jeu 2 n'affiche pas les objets et remplis les grilles
        if(type==2){
                coffre.visible = false;
                lingo.visible = false;
                oeuf.visible = false;
               
                for (i=0; i<3; i++){
                        for (j=0; j<solution[i]; j++) stock[i][j].gotoAndStop(i+4);
                }
        }
}
 

Dans le jeu de type 1 il faut afficher les chiffres sous les grilles et c'est au joueur de placer les objets, je remplis donc les champs texte de l'objet "hud" en conséquence, j'utilise pour cela le tableau "solution".

Dans le jeu de type 2 le joueur ne peut plus utiliser les objets pour le drag & drop, je rend donc ces objets invisibles, et c'est à toi de les placer dans les grilles, le joueur devant ensuite donner le bon chiffre correspondant pour chaque grille. Pour cela je fais une boucle sur les 3 grilles, et pour chacune je recrée une boucle allant de zéro au chiffre contenu dans la solution pour cette grille, pour chaque case je modifie l'affichage pour que ce soit l'objet plein qui s'affiche et non l'objet vide, et hop mes grilles sont remplies du nombre d'objet voulu.

Bien, reste à gérer le jeu en lui même maintenant que tout est prêt.

// attraper un objet
function attrape(e:MouseEvent):void{
        e.target.startDrag();
}

// relacher un objet
function relache(e:MouseEvent):void{
        // relache l'objet
        stopDrag();
       
        // verifie si l'objet touche une case d'une grille et affiche la bonne image
        var ob:MovieClip = MovieClip(e.target);
        for each(var cible:MovieClip in stock[ob.id]){
                if(collision(ob,cible)) cible.gotoAndStop(ob.id+4);
        }
       
        // replace l'objet
        ob.x = ob.posx;
        ob.y = ob.posy;
       
        // compte les objets dans les grilles
        compter();
}

Pour le type de jeu 1 on drag & drop des objets dans les grilles, on va donc utiliser deux écouteurs et fonctions par objet.
Le première sert juste à attraper l'objet.
La seconde permet de relâcher l'objet, puis vérifie si l'objetest placé dans la bonne grille, pour cela on se sert du tableau de stockage des grilles et de l'id de l'objet, si l'objet est au dessus d'une case de la bonne grille, la case affiche l'objet plein (on verra la détection de collision après).

Dans tous les cas, une fois l'objet lâché, il retourne à sa place d'origine (on se sert de la variable préalablement enregistrée).
Puis on compte le nombre d'objets contenus dans chaque grille (on verra comment après).

Comment tester la collision autrement que par un hitTestObject ?

// tester la collision
function collision(A:MovieClip,B:MovieClip):Boolean {
        if(A.x>B.x+B.width || A.x+A.width<B.x || A.y>B.y+B.height || A.y+A.height<B.y) return false;
        return true;
}

Ici je regarde simple si un objet A est complétement en dehors d'un objet B, si c'est le cas il n'y a pas collision, sinon il y a forcément collision, on retourne la valeur de la collision. C'est plus pratique comme ça car on maîtrise mieux les choses mais dans ton cas précis hitTestObject aurait pu suffire.

Passons à la méthode pour compter les objets :

// compter les objets
function compter():void{
       
        // compteurs
        var totalCoffres:int = 0;
        var totalLingos:int = 0;
        var totalOeufs:int = 0;
       
        // boucle sur les trois grilles
        for (i=0; i<3; i++){
               
                // pour chaque case de chaque grille
                for each(var cible:MovieClip in stock[i]){
                       
                        // si la case affiche un objet
                        if(cible.currentFrame>3) {
                               
                                // incrémente le bon compteur
                                if(i==0) totalCoffres++;
                                if(i==1) totalLingos++;
                                if(i==2) totalOeufs++;
                        }
                }
        }
       
        // affiche le résultat du comptage
        with(hud) {
                centaines.text = totalCoffres.toString();
                dixaines.text = totalLingos.toString();
                unites.text = totalOeufs.toString();
               
        }
}

On crée d'abord trois compteurs.
Puis on boucle sur les trois grilles, on vérifie pour chaque case de la grille la frame affichée dans le clip, si elle est suppérieure à 3 (nombre à partir du quel les objets sont remplis) c'est qu'on a une case remplie, on incrémente donc le compteur en fonction de la grille testée.
On affiche ensuite le résultat dans les champs textes du "hud".

Pour le jeu de type 1 on a terminé le gameplay, le jeu de type 2 correspondant juste à une saisie dans une zone de texte pas besoin de tout ça, voyons ce qu'il sa passe quand on cliques sur le bouton de validation.

// valider la solution
function valider(e:MouseEvent):void{
        with(hud) {
               
                // si le type de jeu est 1 compare les résultats
                if(typeDeJeu==1){
                        if(centaines.text == cibleC.text && dixaines.text == cibleD.text && unites.text == cibleU.text){
                                gagne();
                        } else {
                                perdu();
                        }
                       
                // sinon compare le résultat à la solution
                } else {
                        if(cibleC.text == solution[0] && cibleD.text==solution[1] && cibleU.text==solution[2]){
                                gagne();
                        } else {
                                perdu();
                        }
                }
        }
}

On va travailler dans le "hud" (d'où l'utilisation de l'instruction "with" - avec), là il s'agit de comparer les résultats, pour le jeu 1 on compare les chiffres de la première ligne de texte et ceux de la seconde, si tout est ok on a gagné, sinon on a perdu. Pour le jeu de type 2 on compare les chiffre de la deuxième ligne de texte (là où le joueur à saisi les infos) à ceux contenus dans le tableau de solution.

Note que j'ai mis les deux comparaisons pour l'exemple, tu pourrais très bien tout comparer directement au tableau de solution, mais au moins tu as la base pour faire ce que tu veux.

Reste deux choses à voir, ce qu'il se passe quand on gagne et quand on perds :

// gagné
function gagne():void{
        hud.resultat.text = "bravo";
}

On affiche juste le résultat dans le dernier champ texte, à toi d'aller plus loin pour permettre de rejouer ect...

// perdu
function perdu():void{
       
        // vide les champs
        hud.resultat.text = "perdu";
        hud.centaines.text = "";
        hud.dixaines.text = "";
        hud.unites.text = "";
        hud.cibleC.text = "";
        hud.cibleD.text = "";
        hud.cibleU.text = "";
                       
        // vide les grilles
        for (i=0; i<3; i++){
                for each(var cible:MovieClip in stock[i]){
                        cible.gotoAndStop(i+1);
                }
        }
       
        // relance le jeu
        init();
}

On affiche le résultat dans le dernier champ texte puis on vide tout, champs textes et objets des grilles, et enfin on relance le jeu, attention cependant, je n'ai pas cherché midi à quatorze heures et je n'efface pas les objets, du coup quand tu va relancer la fonction "init" elle va recréer des grilles et des objets par dessus les anciennes qui sont encore présente, et également ajouter des écouteurs qui sont déjà présents, pour bien faire il faudrait vraiment tout nettoyer avant de relancer le jeu, ou passer par une fonction intermédiaire ("relancerJeu" par exemple) qui ne s’occuperait que de relancer la partie sans tout réinitialiser, mais je te laisses bosser là dessus.

A partir de là la boucle est bouclée, tes joueurs peuvent rejouer au jeu.

Ce n'est bien sur qu'un brouillon, c'est bourré de fautes et de petits bugs car écrit vite fait, mais tu as tous les éléments pour construire ton jeu en quelques lignes et pas avec des centaines comme tu l'avais fait au départ, à présent à toi de jouer ;-)

#18 mrdodo

    Ceinture Orange

  • Members
  • PipPipPip
  • 42 messages

Posté 18 June 2013 - 15:23 PM

Merci beaucoup pour ce cour magistrale ! ça m'aide beaucoup ! Surtout au niveau de méchanisme ( les boucle par exemple ! ) Je reviens vers toi quand je bloquerais a nouveau, je suis en train de faire un bouton rejouer, et j'essaye aussi de changer les conditions de "perdu".

En pièce jointe, j'ai mit le petit powerpoint qu'on a réalisé vite fait avec l'équipe pédagogique.

En tout cas merci beaucoup !

Fichier(s) joint(s)





1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)