Spacedivide : protège la terre d'un énorme astéroïde

Description

Un jeu de shoot ou il faut cliquer vite et bien.

Un petit vaisseau vous aide pour détruire les débris minuscules.

J'ai travaillé un minimum de contexte et les graphismes, dites mois ce que vous en pensez.

Les armes spéciales arrivent au fur et à mesure.

Source / Exemple :


// J'utilise les tableaux, c'est archaïque mais ça marche et au moins je comprend ce que je fais ^^
// INITIALISATION
// arreter l'animation
stop();
// gel
var geltime=-1
// mines
var minesenstock:Number = 0;
if (niveau>3) {
	minesenstock = 3;
}
var ciblemine:Number = -1;
var delaymine = 0;
// rechargement de l'onde de choc
var ondereload = 0;
ondedispo._visible = false;
// ...du score
var score:Number = 0;
var asterorestants:Number = 0;
// ...des astéroides
var x:Array = new Array();
var y:Array = new Array();
var ix:Array = new Array();
var iy:Array = new Array();
var s:Array = new Array();
var r:Array = new Array();
var ir:Array = new Array();
var dessin:Array = new Array();
var exist:Array = new Array();
// ...du premier asteroide
for (a=0; a<niveau; a++) {
	x[a] = Math.random()*500+50;
	y[a] = -Math.random()*200;
	ix[a] = 0;
	iy[a] = 2;
	s[a] = 100;
	r[a] = 0;
	ir[a] = 0;
	dessin[a] = 1;
	exist[a] = true;
}
// ...de l'affichage de la sourie
Mouse.hide();
// ...du viseur (pour qu'il s'affiche par dessus les astéroïdes
_root.attachMovie("viseur", "viseur", 1);
// ...du son lorsqu'on tire
var shoot:Sound = new Sound();
shoot.attachSound("shoot");
_root.onMouseDown = function() {
	shoot.stop();
	shoot.start();
	canon.canon.play();
	canon2.canon.play();
};
// son d'ataque du petit vaisseau
var miniatk:Sound = new Sound();
miniatk.attachSound("miniatk");
// son dexplosion des asteroides
var kass:Sound = new Sound();
kass.attachSound("kass");
// son de lancer du missile
var missile:Sound = new Sound();
missile.attachSound("missile");
// le vaisseau amis
var reloadminiv:Number = 0;
// BONCLE PRINCIPALE
_root.onEnterFrame = function() {
	// canons
	canon.canon._rotation = Math.atan2(_ymouse-canon._y, (_xmouse-canon._x)/2)*180/Math.PI+180;
	canon._height = Math.abs(_ymouse-canon._y)/2;
	canon2.canon._rotation = Math.atan2(_ymouse-canon2._y, (_xmouse-canon2._x)/2)*180/Math.PI+180;
	canon2._height = Math.abs(_ymouse-canon2._y)/2;
	// onde de choc
	if (niveau>1) {
		ondereload++;
		if (ondereload>70) {
			ondedispo._visible = true;
			if (Key.isDown(Key.LEFT)) {
				ondereload = 0;
				ondedechoc.play();
				for (a=0; a<x.length; a++) {
					iy[a] -= 2000/(s[a]*s[a]);
					if(niveau>5){
						iy[a] -= 200/(s[a]);
						}
				}
				
			}
		} else {
			ondedispo._visible = false;
		}
	}
	// missile
	_root.miss._y -= 3;
	if(niveau>3){
		_root.miss._y -= 3;
	
		}
	if (_root.miss._y<-20 && niveau>2) {
		if (Key.isDown(Key.UP)) {
			_root.miss._y = vaisseauami._y;
			_root.miss._x = vaisseauami._x;
			missile.start();
		}
	}
	if (miss._y<-20 && niveau>3) {
		_root.missdispo._visible = true;
	} else {
		_root.missdispo._visible = false;
	}
	for (a=0; a<x.length; a++) {
		if (exist[a] && Math.abs(_root.miss._x-x[a])<20 && Math.abs(_root.miss._y-y[a])<20) {
			if (s[a]>50) {
				expl = _root.attachMovie("explosion", "expl"+score.toString(), -10-score);
				expl._x = x[a];
				expl._y = y[a];
				// gagner un point
				score += 1;
				// modifier l'asteroide touché
				iy[a] *= 0.5;
				iy[a] -= 2;
				s[a] *= 0.9;
				ir[a] = Math.random()*20-10;
				dessin[a] = Math.floor(3.99*Math.random())+1;
				// creer un nouvel asteroide
				var newobj:Number = x.length;
				x[newobj] = x[a];
				y[newobj] = y[a];
				ix[newobj] = Math.random()*5-2.5;
				iy[newobj] = iy[a];
				s[newobj] = s[a]*0.9;
				ir[newobj] = Math.random()*20-10;
				r[newobj] = r[a];
				dessin[newobj] = Math.floor(3.99*Math.random())+1;
				exist[newobj] = true;
			} else {
				exist[a] = false;
			}
		}
	}
	// effacer les traits existants
	_root.clear();
	// le vaisseau qui aide
	// suivre la sourie
	vaisseauami._x += (_xmouse-vaisseauami._x)/5;
	if (_root.miss._y<0) {
		// recharger
		reloadminiv++;
	}
	// tirer
	if (reloadminiv>5) {
		for (a=0; a<x.length; a++) {
			if (s[a]<50 && reloadminiv>5 && exist[a]) {
				if (Math.abs(x[a]-vaisseauami._x)<70) {
					if (y[a]<vaisseauami._y) {
						reloadminiv = 0;
						exist[a] = 0;
						_root.lineStyle(1, 0xFFFF00, 50);
						_root.moveTo(vaisseauami._x, vaisseauami._y);
						_root.lineTo(x[a], y[a]);
						score++;
						// petite explosion
						expl = _root.attachMovie("explosion", "expl"+score.toString(), -10-score);
						expl._x = x[a];
						expl._y = y[a];
						// son d'explosion
						//miniatk.stop()
						//miniatk.start()
					}
				}
			}
		}
		reloadminiv = 0;
	}
	// le gel
	if(Key.isDown(Key.RIGHT) && geltime<-100 && niveau>4){
		geltime=100
		}
	geltime--
	// le viseur à la place de la sourie
	viseur._x = _xmouse;
	viseur._y = _ymouse;
	// effacer les asteroïdes existants
	_root.createEmptyMovieClip("base", 0);
	// gestion de chaque asteroïde un par un	
	// compter asteroides restants
	asterorestants = 0;
	for (a=0; a<x.length; a++) {
		if (exist[a]) {
			asterorestants++;
			// ...l'afficher
			ref = _root.base.attachMovie("piece", a.toString(), a);
			ref.gotoAndStop(dessin[a]);
			ref._x = x[a];
			ref._y = y[a];
			ref._width = s[a];
			ref._height = s[a];
			ref._rotation = r[a];
			// afficher une mine ou non
			if (ciblemine == a) {
				ref.mine._visible = true;
			} else {
				ref.mine._visible = false;
			}
			// ...appliquer l'inertie à la position
			if(geltime<0 || Math.floor(a/2)*2==a){
			x[a] += ix[a];
			y[a] += iy[a];
			r[a] += ir[a];
			// ...gravité
			iy[a] += 0.01;
			}else{
				ref._alpha=50
				}
			// ...rebon sur les bords de l'écrant
			if (x[a]<s[a]/2 || x[a]>500-s[a]/2) {
				ix[a] *= -1;
			}
			/*if (y[a]<-s[a]) {
																						iy[a] = 0;
																						y[a] = -s[a]+1;
																					}*/
			//... fair game over si l'asteroïde touche la terre ( =en bas de l'écrant)
			if (y[a]>500+s[a]/2) {
				_root.base.removeMovieClip();
				_root.gotoAndStop(4);
			}
			//... Lorsqu'on clique sur un asteroide :
			ref.onPress = function() {
				if (niveau>3 && Key.isDown(Key.DOWN) && ciblemine == -1 && minesenstock>0) {
					minesenstock--;
					ciblemine = this.getDepth();
					delaymine = 100;
				} else {
					// petite explosion
					kass.stop();
					kass.start();
					expl = _root.attachMovie("explosion", "expl"+score.toString(), -10-score);
					expl._x = _xmouse;
					expl._y = _ymouse;
					// gagner un point
					score += 2;
					// Si c'est un asteroïde normale, il se divise :
					// modifier l'asteroide cliqué
					iy[this.getDepth()] *= 0.5;
					iy[this.getDepth()] -= 2;
					s[this.getDepth()] *= 0.9;
					ir[this.getDepth()] = Math.random()*10-5;
					dessin[this.getDepth()] = Math.floor(3.99*Math.random())+1;
					// creer un nouvel asteroide
					var newobj:Number = x.length;
					x[newobj] = x[this.getDepth()];
					y[newobj] = y[this.getDepth()];
					ix[newobj] = Math.random()*5-2.5;
					iy[newobj] = iy[this.getDepth()];
					s[newobj] = s[this.getDepth()]*0.9;
					ir[newobj] = Math.random()*10-5;
					r[newobj] = r[this.getDepth()];
					dessin[newobj] = Math.floor(3.99*Math.random())+1;
					exist[newobj] = true;
				}
			};
		}
	}
	// mines
	dispnombremines.gotoAndStop(minesenstock+1);
	delaymine--;
	if (delaymine<=0 && ciblemine != -1 && exist[ciblemine]) {
		kass.start();
		for (a=0; a<x.length; a++) {
			if (Math.abs(x[a]-x[ciblemine])<80 && Math.abs(y[a]-y[ciblemine])<80) {
				exist[a] = false;
				score++;
				expl = _root.attachMovie("explosion", "expl"+score.toString(), -10-score);
				expl._x = x[a];
				expl._y = y[a];
			}
		}
		ciblemine = -1;
	}
	if (asterorestants == 0) {
		_root.gotoAndStop(2);
	}
};

Codes Sources

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.