Space invader v1 entièrement en action script !

Soyez le premier à donner votre avis sur cette source.

Vue 11 412 fois - Téléchargée 1 377 fois

Description

Ne trouvant rien de probant concernant un jeu simple le tout fait uniquement en action script, je l'ai donc fait avec mes petites mimines. la gestion est simple et détaillée, mais le jeu n'est pas complet. Le vaisseau peut tirer sur les aliens qui se déplacement "à l'ancienne", mais ceux-ci ne ripostent pas encore. Le code est simple, mais l'aventage, c'est que tout est fait en action script. Vous pouvez le modifier comme bon vous semble, et m'envoyer un 'tit mail si vous avez des question ou des propositions ;). Il manque le tir des aliens et les pyramides pour se protéger. Bonheur et joie à tous :P

Source / Exemple :


Dans la bibliothèque, il ya a: 

- Un clip alien formé de la façon suivante:
      image 1 à 20, l'alien bouge et l'image 20 contient le code: gotoAndPlay(1);
      image 21 à 30, l'alien se désintègre et l'image 30 contient le code suivant: gotoAndPlay(1);

- Un clip dBall qui représente le tir du vaisseau 

- Un clip defender qui correspond au vaisseau du héro ;) 

- Des sons associés aux actions de tirs et d'explosions des vaisseaux. 

Le source qui suit est à mettre dans la première image du calque principal: 

// Source écrit par -=Zac en Flash version 8.0 (ça marche peut-être en flash MX 2004...)
// 09/05/2007
// flash@zacland.net pour tout renseignement. 

depth=0; // Variable pour gestion de profondeur 

// Affectation des sons.
Snd_defenderExplose=new Sound();
Snd_defenderExplose.attachSound("explosion.wav");
Snd_alienExplose=new Sound();
Snd_alienExplose.attachSound("invaderkilled.wav");
Snd_inv01=new Sound();
Snd_inv01.attachSound("fastinvader1.wav");
Snd_inv02=new Sound();
Snd_inv02.attachSound("fastinvader4.wav");
Snd_defenderShoot=new Sound();
Snd_defenderShoot.attachSound("shoot.wav"); 

// On crée une instance du vaisseau du héro :P
defender=attachMovie("defender","defender", depth++,{_x:Stage.width/2, _y:Stage.height});
defender.vTir=1;  // Vitesse du tir
defender.tir=false; // Y'a-t-il un tir déjà en cours ? 

nb_alien=0; // Compteur d'aliens 

// Boucle d'affichage des aliens
for(j=1;j<4;j++){
 for(i=0;i<5;i++){
  alien=attachMovie("alien","alien"+nb_alien, depth++,{_x:i*50+50, _y:j*50}); 
  alien.vt=2;  // Chaque alien a sa propre vitesse de déplacement (même s'ils ont tous la même ^^)
  alien.h=true; // Les aliens vont vers la droite (false -> ils vont vers la gauche)
  nb_alien++;  // On incrémente le compteur pour le tableau
 }
} 

nb_alien0=nb_alien; // On sauvegarde le nombre d'aliens qu'on a au total 

onEnterFrame=function(){
 defender._x=_xmouse; // Le vaisseau suit le déplacement horizontal de la souris
 defender._y=380;   // L'abssice du vaisseau est toujours la même (le bas de l'écran)
 
 txt_alien.text=nb_alien; // On affiche le nombre d'aliens restant
 
 for(i=0;i<nb_alien0;i++){
  cur_alien=_root["alien"+i];    // Sélection N° Alien
  if(cur_alien.h==true){
   cur_alien._x+=cur_alien.vt;   // Depl vers la droite
  } else {
   cur_alien._x-=cur_alien.vt;   // Depl vers la gauche
  }
 
  if(cur_alien._x>Stage.width-15){ // Si sort à droite
   cur_alien._x=Stage.width-15;   // Arrêt progression
   cur_alien.h=!cur_alien.h;      // Inversion du sens
   cur_alien._y+=30;              // On descend de 30 px
   cur_alien.vt+=1;        // On augmente la vitesse
  } 
  
  if(cur_alien._x<15){       // Si on sort à gauche
   cur_alien._x=15;        // Arrêt progression
   cur_alien.h=!cur_alien.h;    // Inversion du sens
   cur_alien._y+=30;        // On descent de 30 px
   cur_alien.vt+=1;        // On augmente la vitesse
  }
  
  if(defender.tir=true){      // Si un tir est en cours
   if(dBall._y>0){         // Si le tir ne sort pas de l'écran (en haut)
    dBall._y-=defender.vTir;   // Le tir avance d'un cran
   } else {            // Sinon
    dBall.removeMovieClip();   // On enlève le clip du tir
    defender.tir=false;      // Il n'y a plus de tir en cours (sous entendu, 
                   // le joueur peut tirer à nouveau)
   }
  }
  
  if(cur_alien.hitTest(dBall)){   // Test de collision entre tir et alien (alien courant de la boucle)
   cur_alien.vt=0;         // L'alien s'arrête
   dBall.removeMovieClip();    // On efface le tir
   defender.tir=false;       // Le joueur peut de nouveau tirer
   nb_alien--;           // Un alien en moins :P
   Snd_alienExplose.start();    // On joue le son de l'explosion
   cur_alien.gotoAndPlay(21);   // On joue la séquence de l'alien qui explose (une instruction 
                   // removeClip se trouve dans la dernière image de la séquence)
   }
 }
} 

onMouseDown=function(){        // Lors de l'appui sur le bouton de la souris
 if(defender.tir==false){      // Si un tir n'est pas déjà en cours
  // On crée le tir à l'emplacement du vaisseau
  dBall=attachMovie("dBall","dBall",depth++,{_x:defender._x, _y:defender._y}); 
  Snd_defenderShoot.start();    // On joue le son qui va bien
  defender.tir=true;        // On interdi le joueur de pouvoir tirer à nouveau tant que le tir 
                   // est toujours existant
 }
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
2 juin 2008

serait-il possible par exemple de se servir de ce jeu pour déterminer qui entre ou qui n'entre pas dans un site.

Je m'explique : plutôt que d'entrer directement dans un site, je propose de jouer. A l'issue du jeu, soit tu l'as fini dans un temps imparti et un bouton "entrer" apparait pour accéder au site, soit tu te plantes ou tu dépasses le temps et un bouton apparait te proposant de rejouer.

C'est faisable ou j'ai fumé trop de moquette ?
Messages postés
487
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
1 septembre 2011

oooops, la boulette, ^^

il faut mettre:
cur_alien._x((is_out 2)?cur_alien._x-15:cur_alien._x+15); // on redécale tout le monde
// si la forme de test du dessu n'est pas compatible avec actionscript utilise la suivante
// if (is_out == 2) cur_alien._x-= 15;
// else cur_alien._x+= 15;

et non pas:
cur_alien._x((is_out 2)?Stage.width-15:15); // on redécale tout le monde
// si la forme de test du dessu n'est pas compatible avec actionscript utilise la suivante
// if (is_out == 2) cur_alien._x= Stage.width-15;
// else cur_alien._x= 15;


désolé
;)
Messages postés
487
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
1 septembre 2011

Pour l'instant, dès qu'un alien dépasse le bord du cadre (gauche ou droite), tu le recule de 15, tu inverse son sens de transition, puis tu le descends et enfin tu l'accelère.
A ta place, je ferais ainsi:

/////////////////////////////////////
is_out = 0; //0 pas de sortie; 1 sortie à gauche; 2 sortie à droite;
for(i=0;i<nb_alien0;i++){
cur_alien=_root["alien"+i]; // Sélection N° Alien
if(cur_alien.h==true){
cur_alien._x+=cur_alien.vt; // Depl vers la droite
} else {
cur_alien._x-=cur_alien.vt; // Depl vers la gauche
}

if(cur_alien._x>Stage.width-15){ // Si sort à droite
is_out = 2; // On previent
}

if(cur_alien._x<15){ // Si on sort à gauche
is_out = 1; // On previent
}

if(defender.tir==true){ // Si un tir est en cours
if(dBall._y>0){ // Si le tir ne sort pas de l'écran (en haut)
dBall._y-=defender.vTir; // Le tir avance d'un cran
} else { // Sinon
dBall.removeMovieClip(); // On enlève le clip du tir
defender.tir=false; // Il n'y a plus de tir en cours (sous entendu,
// le joueur peut tirer à nouveau)
}
}
if(is_out!=0){ // Si est sorti d'un coté ou de l'autre.

for(i=0;i<nb_alien0;i++){
cur_alien=_root["alien"+i]; // Sélection N° Alien
cur_alien._x((is_out 2)?Stage.width-15:15); // on redécale tout le monde
// si la forme de test du dessu n'est pas compatible avec actionscript utilise la suivante
// if (is_out == 2) cur_alien._x= Stage.width-15;
// else cur_alien._x= 15;
cur_alien.h=!cur_alien.h; // Inversion du sens
cur_alien._y+=30; // On descend de 30 px
cur_alien.vt+=1; // On augmente la vitesse
}
}

///////////////////////////////////////////

Du coups, il n'est plus nécessaire d'avoir une vitesse de déplacement pour chaque alien puisque tous vont descendre en même temps, donc tous vont accélerer ensemble.
Il en va de même pour le sens de déplacement. Je n'ai pas modifié ces paramètres, te laissant seul juge de la pertinence de mes commentaires.

Pour finir, il manque aussi deux truc importants avant la riposte des aliens:
- que se passe t-il quand on a dégommé tout les aliens
- que se passe t-il quand les aliens ateignent la dernière ligne
Messages postés
35
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2007

Ha, c'est bien, il y en a un qui a réagit ... :P Oui, en effet, les aliens doivent tous se décaler en même temps, mais le gestion de ce type de déplacement m'a paru "plus" dur à gérer... mais si quelqu'un veut se pencher sur le "problème", je suis preneur :D

P.S.: Les niveaux supérieurs sont en cours, avec les aléats du travail entre temps ;)
Messages postés
487
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
1 septembre 2011

Salut,
C'est plutôt bien réussi comme petit jeu, mais il y à un petit truc qui ne colle pas par rapport aux jeux "d'origine":
Normalement, tout les aliens descendent en même temps et repartent dans le sens oposé en même temps.
Voili voilou...
P.S.: les niveaux suivant sont attendu avec impatience ;)
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.