Moteur shoot'em up simple et parametrable

Description

Bon dernière source de la journée ^^ j'ai développé çà cet aprem.

Alors qu'est-ce que c'est ? Un Shoot'em up en 2d simple, avec une partie jeu et une partie admin...

"Admin" ? Oui ! Ouvrez le fla, passez en mode admin, et vous pouvez définir où vos monstre apparaitront. Vous pouvez alors générer le code à copier/coller dans le code. Ce petit bout de code correspond au tableau qui contient les coordonnées. Repassez en mode joueur, après avoir fait cela, et vos monstres apparaitront où vous le souhaitiez !

Pour passer d'un mode à l'autre, modifier la variable "version" au début du code.

En Admin :
Drag sur le monstre => duplique un nouveau monstre.
Générer => céer le code, en fonction des monstres placés
Barre d'espace => cache le monstre modèle, le bouton, et le champ
Flèche haut/bas, pendant que vous draggez un monstre => agrandit/rapeticie le clip du monstre
Flèche gauche/droite, pendant que vous draggez un monstre => tourne le clip à gauche/droite

Vous pouvez modifier les quelques clips comme vous le souhaitez, et crée ainsi de nombreux shoot'em up aux univers différents ^^

Le code est comme d'habitude bien commenté :)

Source / Exemple :


//Les positions possibles des monstres : x,y,%taille,rotation
var tabPositions=[[65,69,60,10],[127.95,72,50,105],[40.95,82,70,-175],[91.95,241.95,40,25],[57.95,242.95,50,-5],[125.95,261.95,40,30],[385.95,88,75,-45],[423.95,71,75,0],[465.95,69,60,45],[16,499.95,165,30],[65,532.95,145,35],[214.95,415.95,60,-75],[230.95,414.95,55,20],[340.95,314.95,125,-40],[329.95,367.95,140,85],[357.95,257.95,40,-5],[379.95,284.95,50,55],[605.95,266.95,35,-45],[633.95,262.95,30,25],[631.95,402.95,110,-60],[639.95,391.95,100,60]];

var nbMonstresTotal=100;//Le nombre de monstre à faire apparaitre
var nbMonstres=0;//Le nombre de monstres générés
var vitesseRetraitMonstresMax=2000;//Le temps de retrait d'un monstre max
var vitesseRetraitMonstresMin=300;//Le temps de retrait d'un monstre min
var ecartApparitionMax=2000;//Le temps d'apparition entre chaque monstre max
var ecartApparitionMin=100;//Le temps d'apparition entre chaque monstre min
var score=0;//Le score du joueur
var version="joueur";//"admin" ou "joueur"
var spaceDown=false;//Utile pour gérer la barre d'espace en mode admin

//ajoute un monstre au jeu
function nouveauMonstre(){
	
	clearInterval(IntervalMonstres);//On supprime l'interval qui a fait apparaitre ce monstre
	
	var positionMonstre=Math.floor(Math.random()*tabPositions.length);//on définit la position de ce nouveau monstre parmi toutes celles enregistrées	
		
	attachMovie("monstre","monstre"+nbMonstres,100+nbMonstres);//on place le clip sur la scène	
	this["monstre"+nbMonstres].tabPositionOccupee=tabPositions[positionMonstre];//on garde en mémoire la position occupée par e monstre
	this["monstre"+nbMonstres]._x=tabPositions[positionMonstre][0];//on le place sur l'axe des abscissses
	this["monstre"+nbMonstres]._y=tabPositions[positionMonstre][1];//on le place sur l'axe des ordonnées
	this["monstre"+nbMonstres]._xscale=tabPositions[positionMonstre][2];//On modifie sa taille
	this["monstre"+nbMonstres]._yscale=tabPositions[positionMonstre][2];//On modifie sa taille
	this["monstre"+nbMonstres]._rotation=tabPositions[positionMonstre][3];//On effectue la rotation	
	tabPositions.splice(positionMonstre,1);//On enlève la position du monstre dans le tableau qui contient toutes les positions
	
	//fonction retour du monstre, appelée au bout de x secondes
	this["monstre"+nbMonstres].retour = function(){
		tabPositions.push(this.tabPositionOccupee);//On replace dans le tableau contenant toutes les positions, celle que le monstre occupait
		this.play();//Anim de retour		
	}
	//Fonction de clic sur le monstre
	this["monstre"+nbMonstres].onPress = function(){
		this.enabled=false;
		tabPositions.push(this.tabPositionOccupee);//On replace dans le tableau contenant toutes les positions, celle que le monstre occupait
		this.gotoAndPlay("disparition");//Anim de disparition/explosion
		score++;//+1 au score
	}
	//on définit la vitesse de retrait de ce monstre, on appelle la méthode "retour" au bout de ce temps
	vitesseRetraitMonstres=vitesseRetraitMonstresMax-(vitesseRetraitMonstresMax-vitesseRetraitMonstresMin)*(nbMonstres/nbMonstresTotal);
	setInterval(this["monstre"+nbMonstres],"retour",vitesseRetraitMonstres);
		
	//On détermine le temps avant l'apparition du nouveau monstre
	ecartApparition=ecartApparitionMax-(ecartApparitionMax-ecartApparitionMin)*(nbMonstres/nbMonstresTotal);
	if(nbMonstres<nbMonstresTotal)//S'il reste des monstres à afficher
		IntervalMonstres=setInterval(this,"nouveauMonstre",ecartApparition);//On appelle la fonction
	else
		nbMonstres="fin";//C'est fini
	
	nbMonstres++;//On indique que l'on a ajouté un nouveau monstre
}

//Fonction appelée en mode admin. Permet de générer un tableau de position
function admin(){
	
	//On vérifie si la touche espace a été appuyée. Si oui on affiche/cache, les outils.
	this.onEnterFrame=function(){
		if(Key.isDown(Key.SPACE)){
			if(spaceDown){
				spaceDown=false;
				generer._visible=false;
				graphMonstre._visible=false;
				positionsTexte._visible=false;
			}else{
				spaceDown=true;
				generer._visible=true;
				graphMonstre._visible=true;
				positionsTexte._visible=true;
			}
		}		
	}
	
	premierPlan._alpha=50;//POur voir les monstres derrière le premier plan, on réduit l'opacité
	
	//On place sur la scène le bouton de génération des coordonnées
	attachMovie("generer","generer",99);	
	generer._x = -75;
	generer._y = 100;
	
	//Si l'on clique sur ce bouton
	generer.onPress = function(){
		
		//On crée un champ texte
		this._parent.createTextField("positionsTexte",5000,25,25,150,10);
		this._parent.positionsTexte.background=true;
		this._parent.positionsTexte.autoSize=true;
		this._parent.positionsTexte.multiline=true;
		this._parent.positionsTexte.wordWrap=true;
		this._parent.positionsTexte.text="";
		
		//on affiche dedans les données à copier/coller dans le code. ATTENTION à la virgule de trop à la fin
		for(var i=0;i<this._parent.nbMonstres;i++){			
			this._parent.positionsTexte.text+="["+this._parent["graphMonstre"+i]._x+","+this._parent["graphMonstre"+i]._y+","+this._parent["graphMonstre"+i]._xscale+","+this._parent["graphMonstre"+i]._rotation+"],"
		}
	}
	
	//On place sur la scène un modèle de monstre
	attachMovie("graphMonstre","graphMonstre",100);	
	graphMonstre._x = -75;
	graphMonstre._y = -50;
	
	//Quand on clique dessus
	graphMonstre.onPress = function(){
		
		//On duplique le clip et on commence le drag 
		this.duplicateMovieClip("graphMonstre"+nbMonstres,101+nbMonstres);		
		this._parent["graphMonstre"+nbMonstres].deplacement=true;
		this._parent["graphMonstre"+nbMonstres].startDrag();
		
		//Permet de gérer le drag and drop après avoir posé le monstre la première fois
		this._parent["graphMonstre"+nbMonstres].onPress = function(){
			this.deplacement=true;
			this.startDrag();
		}
		this._parent["graphMonstre"+nbMonstres].onRelease = function(){
			this.deplacement=false;
			this.stopDrag();
		}
		
		//Pour chaque frame du clip dupliqué du monstre
		this._parent["graphMonstre"+nbMonstres].onEnterFrame = function(){
			
			//On vérifie si l'one est en drag et si une touche directionnelle est activée
			if(this.deplacement==true && Key.isDown(Key.LEFT))//Si la fléche gauche : on rotationne à gauche
				this._rotation-=5;
			if(this.deplacement==true && Key.isDown(Key.RIGHT))//Si la fléche droite : on rotationne à droite
				this._rotation+=5;
			if(this.deplacement==true && Key.isDown(Key.UP)){//Si la flèche haut, on agrandit le clip
				this._xscale+=5;
				this._yscale+=5;
				this._x=_xmouse;
				this._y=_ymouse;
				
			}
			if(this.deplacement==true && Key.isDown(Key.DOWN)){//Si la flèche bas, on rapeticie le clip
				this._xscale-=5;
				this._yscale-=5;
				this._x=_xmouse;
				this._y=_ymouse;
			}
		}		
		
		nbMonstres++;//on indique que l'on a rajouté un monstre
	}
	
}

//fonction d'initialisation
function init(){
	
	//on initialise les premières durée
	var vitesseRetraitMonstres=vitesseRetraitMonstresMax;
	var ecartApparition=ecartApparitionMax;
	
	//On place sur la scène le clip de fond
	attachMovie("fond","fond",1);	
	fond._x = 0;
	fond._y = 0;	
	
	//On place sur la scène le clip de premier plan
	attachMovie("premierPlan","premierPlan",5000);	
	premierPlan._x = 0;
	premierPlan._y = 0;
	premierPlan.onPress = function(){}//on empeche de cliquer à traver les nuages
	
	//on place sur la scène un chmap pour afficher le score
	this.createTextField("scoreTexte",5003,20,20,20,20);
	scoreTexte.text="123";
	scoreTexte.variable="score";
	scoreTexte.textColor = 0x000000;
	scoreTexte.background=true;
	
	//Selon la version on appelle l'une ou l'autre méthode
	if(version=="joueur")
		nouveauMonstre();
	else
		admin();
}
init();
stop();

Codes Sources

A voir également

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.