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);
}
};
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.