//HEADBALL par Walter Siracusa ball.v=0; //Vitesse du ballon ball.rot=1 //Sens de rotation du ballon Score=0; //Score courant Time=4500; //Temps de la partie (1,5 min) Old_timer=0; //Timer pour gérer le son du ballon Depth_coinA=0; //Profondeurs des pièces... Depth_coinB=0; //... continuer_but._visible=false; //Association des sons Snd_ball=new Sound(); Snd_ball.attachSound("ball.wav"); //Collision entre tête et ballon Snd_coin=new Sound(); Snd_coin.attachSound("coin.mp3"); //Pièce collectée Snd_start=new Sound(); Snd_start.attachSound("start.mp3"); //Début de partie //Tableaux de précalculs des angles Tabx=new Array(); Taby=new Array(); for(i=0;i<24;i++){ //24 angles tous les 15° d'un rayon égal à 16 Tabx[i]=Math.round(Math.cos(i*15*Math.PI/180)*16); Taby[i]=Math.round(Math.sin(i*15*Math.PI/180)*16); } function AddCoin(){ clip=attachMovie("coin","coin"+Depth_coinB,Depth_coinB); //trace(Depth_coinA+"--"+Depth_coinB); Depth_coinB++; clip._x=50+Math.random()*490; clip._y=50+Math.random()*350; clip.time=150; clip.bool=false; //false: non prise - true: prise } function EndGame(){ clearInterval(id_AddCoin); onEnterFrame=function(){}; Mouse.show(); for(prop in _root){ //Supprime les pièces qui restent if(prop.substr(0,4)=="coin") _root[prop].removeMovieClip(); } Snd_start.start(); continuer_but._visible=true; } continuer_but.onRelease=function(){ _root.nextFrame(); } id_AddCoin=setInterval(AddCoin,1000); //Ajoute une pièce toutes les secondes Mouse.hide(); //Cache le pointeur de la souris Snd_start.start(); //Coup d'envoi (sifflet) onEnterFrame=function(){ //Position de la tête = position de la souris head._x=_xmouse; head._y=_ymouse; //Distance entre la tête et le ballon dx=head._x-ball._x; dy=head._y-ball._y; rayon=Math.sqrt(dx*dx+dy*dy); // = distance //Vecteur (depx;depy) pour un rayon égal à 1 ball.depx=dx/rayon; ball.depy=dy/rayon; //Rotation de la tête autour du ballon angle=(Math.acos(ball.depx)*180)/Math.PI; //Arc cosinus de depx en degré if(head._y>ball._y) head._rotation=angle; else head._rotation=360-angle; //Tests de collisions de la tête sur la ballon for(i=0;i<24;i++){ if(ball.hitTest(head._x+Tabx[i],head._y+Taby[i],true)){ //Collision sur le périmètre ball.depx2=ball.depx; ball.depy2=ball.depy; ball.v+=1; //Augmentation de sa vitesse ball.rot*=-1; //Inverse le sens de rotation //Au moins 200 ms entre deux sons de ballon if(getTimer()>Old_timer+200){ Old_timer=getTimer(); Snd_ball.start(); } break; //Sort de la boucle } } //Gestion du ballon if(ball.v>=0){ //Vitesse positive //Déplacement ball._x-=ball.depx2*ball.v; ball._y-=ball.depy2*ball.v; ball.v-=0.05; //Ralentissement de sa vitesse //Rotation ball._rotation+=ball.rot*ball.v; } //Gestion des pièces for(i=Depth_coinA;i<=Depth_coinB;i++){ clip=_root["coin"+i]; //Occurrence courante //Temps de présence d'une pièce clip.time--; if(clip.time==0){ clip.gotoAndPlay("clear"); //Disparition de la pièce Depth_coinA++; } //Collision de la tête avec une pièce (non prise) if(!clip.bool && ball.hitTest(clip)){ clip.gotoAndPlay("clear"); //Disparition de la pièce clip.bool=true; //Pièce prise Score+=10; //Ajoute 10 au score courant txt_score.text=Score; Snd_coin.start(); //Joue le son de la pièce } } //Ballon hors du terrain if(ball._x<0 || ball._y<0 || ball._x>580 || ball._y>480){ //Replace le ballon arrêté au centre de la scène ball._x=274; ball._y=224; ball.v=0; //Vitesse nulle Snd_start.start(); //Plus de vie life_mc.nextFrame(); if(life_mc._currentframe==6) EndGame(); } //Temps terminé Time--; //Temps de la partie décrémenté txt_time.text=Time; if(Time==0) EndGame(); }