//DISC par Walter Siracusa function distance(xa,ya,xb,yb){ dx=xb-xa; dy=yb-ya; return Math.ceil(Math.sqrt(dx*dx+dy*dy)); } function rad2deg(val){ return (val*180)/Math.PI; } //-------------------------- function init(move_cible){ if(Init1time){ Init1time=false; //1 vie en moins life_mc.nextFrame(); if(life_mc._currentframe==10){ //Plus de vie gameover_mc._visible=true; gameover_mc.play(); Game=false; }else{ //Il reste encore des vies with(disc_mc){ draging=false; dx=0; dy=0; speed=0; play(); } //Position de la cible aléatoire if(move_cible) cible_mc.play(); } } } disc_mc.onPress=function(){ if(this._y>Y_LINE && Game){ this.startDrag(false); //Dragage du disc this.draging=true; this.dx=0; this.dy=0; Init1time=true; } } function releaseDisc(){ disc_mc.stopDrag(); disc_mc.draging=false; xB=disc_mc._x; //Position finale xB,yB yB=disc_mc._y; dAB=distance(xA,yA,xB,yB); //Distance entre A et B = Rayon disc_mc.dx=(xB-xA)/dAB; //Divise par le rayon pour ramener à l'échelle 1:1 disc_mc.dy=(yB-yA)/dAB; if(dAB>SPEED_DRAG_MAX) speed_drag=SPEED_DRAG_MAX; //Réajuste speed_drag en fonction de dAB else speed_drag=dAB; disc_mc.speed=(speed_drag*SPEED_PIX_MAX)/SPEED_DRAG_MAX; if(dAB>13) wizz_snd.start(); else wiz_snd.start(); } _root.onMouseUp=function(){ //Bouton relâché... if(disc_mc.draging) releaseDisc(); //Disc relâché } _root.onEnterFrame=function(){ if(disc_mc.draging){ //Disc dragué if(disc_mc._y relâché releaseDisc(); else{ //Disc dragué sous la ligne => détermine sa position de départ xA,yA xA=disc_mc._x; yA=disc_mc._y; } }else{ //Disc non dragué => Déplacement disc_mc._x+=disc_mc.dx*disc_mc.speed; disc_mc._y+=disc_mc.dy*disc_mc.speed; //Disc hors du terrain => vitesse nulle disc_mc.out=false; if(disc_mc._x>Stage.width+15 || disc_mc._x<-15 || disc_mc._y<-15 || disc_mc._y>Stage.height+15){ disc_mc.out=true; disc_mc.speed=-1; } //Décélération if(disc_mc.speed<0){ //Arrêt du disc => vitesse nulle disc_mc.speed=0; if(disc_mc._y<=Y_LINE){ //Disc arrêté au dessus de la ligne //Points en fonction de la distance entre le disc et la cible dist=distance(cible_mc._x,cible_mc._y,disc_mc._x,disc_mc._y); if(dist>DISC_CIBLE_MAX) points=0; else points=Math.round((DISC_CIBLE_MAX-dist)*4); //Affiche les points if(points>0){ points_mc._x=disc_mc._x; points_mc._y=disc_mc._y; points_mc.txt.text=points; points_mc.play(); Score+=points; score_txt.text=Score; target_snd.start(); }else init(false); //Aucun point => Nouvel essai }else if(disc_mc.out) init(false); //Disc arrêté sous la ligne et hors du terrain => Nouvel essai }else if(disc_mc.speed!=0) disc_mc.speed-=0.1; //Décélération } } //-------------------------- var Y_LINE=225; var xA,yA,xB,yB; var dAB; var SPEED_DRAG_MAX=40,SPEED_PIX_MAX=10; var DISC_CIBLE_MAX=(disc_mc._width+cible_mc._width)/2; //Distance max entre le disc et la cible var Game=true; //Etat du jeu (false = game over) gameover_mc._visible=false; Score=0; wiz_snd=new Sound(); wiz_snd.attachSound("wiz.wav"); wizz_snd=new Sound(); wizz_snd.attachSound("wizz.wav"); target_snd=new Sound(); target_snd.attachSound("target.wav"); Init1time=true; init();