import processing.core.*; 
import processing.data.*; 
import processing.event.*; 
import processing.opengl.*; 

import ddf.minim.*; 

import java.util.HashMap; 
import java.util.ArrayList; 
import java.io.File; 
import java.io.BufferedReader; 
import java.io.PrintWriter; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.IOException; 

public class ennemie_bouger_test extends PApplet {

//biblioteque son


//fichier son
Minim minim;
AudioPlayer player;

//fichier son tire vaisseau hero
AudioSample ping;
AudioSample ping1;
AudioSample ping2;
AudioSample ping3;


//fichier son boost
AudioSample ping4;


//fichier son explosion
AudioSample explo1;
AudioSample explo2;
AudioSample explos1;

//fichier son menu
AudioPlayer menu;


Vaisseau mon_starship;
Fond_ecran espace;
Vaisseau_mechant[] fight;




//variable pour menu
int posx;
int longueur=150;
int largeur=60;
int posxtext;
int posyText;
PImage image36;
int ecran=0;

























//image vaisseau et projectile et fond ecran

PImage imageS;
PImage image;
PImage image1;
PImage image2;
PImage image3;
PImage image4;
PImage image_Proj;
PImage image_Proj1;
PImage images1;
PImage images;







//image effet (explosion) vaisseau ennemie

PImage imagess1;
PImage images2;
PImage images3;
PImage images4;
PImage images5;
PImage images6;
PImage images7;



//image explsion vaisseau hero

PImage a1;
PImage a2;
PImage a3;
PImage a4;
PImage a5;
PImage a6;
PImage a7;
PImage a8;
PImage a9;
PImage a10;
PImage a11;
PImage a12;
PImage a13;
PImage a14;
PImage a15;
PImage a16;
PImage a17;
PImage a18;





//variable int

int nombre_vaisseau;
int nVaisseau = 0;
int nombre_Vie=3;
int score;
int score1=0;





//variable long

long compteur = 0;







//variables boolean

boolean haut = false;//n
boolean bas = false;//n
boolean gauche = false;//n
boolean droit = false;//n
boolean ralentir ;
boolean accelerer;
boolean shoot;
boolean shout2;
boolean shout3;
boolean shout4;







//timer

Timer mon_Timer;
Timer mon_Timer1;
Timer mon_Timer2;
Timer mon_Timer3;
Timer mon_Timer4;
Timer mon_Timer5;
Timer mon_Timer6;






public void setup() {


  cursor(CROSS);

  //créer un objet de type Timer avec le temps demandé

  mon_Timer = new Timer(10000);//invinsibilite

  mon_Timer1= new Timer(600);// cadence tire attack speciale vaisseau hero

  mon_Timer2= new Timer(200);// cadence tire vaisseau hero

  mon_Timer3= new Timer(10000);//temps chargement attack speciale

  mon_Timer4= new Timer(300);//cadence tir attack 3

  mon_Timer5= new Timer(300);//cadence tir attack 4

  mon_Timer6= new Timer(180000);//temps jeu 









  //element menu

  image36 = loadImage("fond.jpg");

  image36.resize(width, height);




  //// Charge un fichier son depuis le dossier / data de l'esquisse et le reproduit 

  minim = new Minim(this);//instancier la piste

  player = minim.loadFile("sample.mp3");//charger le fichier son







  //charger fichier son tire

  ping = minim.loadSample("son1.wav");
  ping1 = minim.loadSample("son2.wav");
  ping2 = minim.loadSample("son3.wav");
  ping3 = minim.loadSample("son4.wav");





  //charger fichier son explosion
  explo1 = minim.loadSample("explo1.wav");
  explo2 = minim.loadSample("explo2.wav");
  explos1 = minim.loadSample("explos1.wav");





  //charger fichier boost

  ping4 = minim.loadSample("boost.mp3");

  //son menu

  menu= minim.loadFile("menu2.mp3");//charger le fichier son

  menu.loop();



  //chargement image vaisseaux,projectiles

  imageS=loadImage("api.jpg");

  image=loadImage("starshipenaide.png");

  image1=loadImage("starshipen1.png");

  image2=loadImage("starshipen2.png");

  image3=loadImage("starshipen3.png");

  image4=loadImage("starshipboss.png");

  image_Proj=loadImage("proj2.png");

  image_Proj1=loadImage("proj3.png");








  //4041 x 6324 ,largeur hauteur

  images1=loadImage("etoile5.jpg"); 

  images=loadImage("etoile6.jpg"); 








  //chargement image pour effet explsion ennemie

  imagess1=loadImage("ex1.png");

  images2=loadImage("ex2.png");

  images3=loadImage("ex3.png");

  images4=loadImage("ex4.png");

  images5=loadImage("ex5.png");

  images6=loadImage("ex6.png");

  images7=loadImage("ex7.png");









  //chargement image pour effet explosion vaisseau hero



  a1=loadImage("blue1.png");
  a2=loadImage("blue2.png");
  a3=loadImage("blue3.png");
  a4=loadImage("blue4.png");
  a5=loadImage("blue5.png");
  a6=loadImage("blue6.png");
  a7=loadImage("blue7.png");
  a8=loadImage("blue8.png");
  a9=loadImage("blue9.png");
  a10=loadImage("blue10.png");
  a11=loadImage("blue11.png");
  a12=loadImage("blue12.png");
  a13=loadImage("blue13.png");
  a14=loadImage("blue14.png");
  a15=loadImage("blue15.png");
  a16=loadImage("blue16.png");
  a17=loadImage("blue17.png");
  a18=loadImage("blue18.png");






















  nombre_vaisseau=100;//definir le nombre de case dans tableau ennemie

  fight = new Vaisseau_mechant[nombre_vaisseau];//creation vaissau ennemie tableau

  mon_starship = new Vaisseau();//creation vaisseau hero

  espace = new Fond_ecran();//creation objet fond ecran






  

  
}







public void draw() {










  //ecran level(play)---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  if (ecran==5) {

    //bouton 1
    fill(200, 0, 255);  
    rect(width/2-120, height-height+300, longueur, largeur);
    fill(255, 255, 255);
    textSize (38);
    strokeWeight(3);//epaisseaur contour rectangle
    text("LEVEL 1", width/2-110, 340);

    //bouton 2
    fill(200, 0, 255);
    rect(width/2-120, height-height+450, longueur, largeur); 
    fill(255, 255, 255);
    textSize (38);
    strokeWeight(3);////epaisseaur contour ecriture
    text("LEVEL 2", width/2-110, height-height+492);

    //bouton 3
    fill(200, 0, 255);
    rect(width/2-120, height-height+600, longueur, largeur);
    fill(255, 255, 255);
    textSize (38);
    strokeWeight(3);//epaisseaur contour ecriture
    text("LEVEL 3", width/2-110, height-height+642);
  }




  //level 1-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  else if (ecran==6) {




    if (mon_Timer6.noFinished()) {  

      player.play();//lecture son





      espace.display();



      mon_starship.display();//affichage vaisseau

      imageMode(CENTER);//le x et y de depart du vaisseau sont place au centre
      //text(int(score),width/2,height/2);


      text(PApplet.parseInt(score), width/3, height/2);//affichage score











      for (int i=0; i<fight.length; i++) {//boucle qui va lire dans sa longueur le tableau qui contient les vaisseau ennemies

        if (fight[i] != null) {//condition nul pointer 
          fight[i].display();
        }
      }














      //patherne vaisseau (apparition vaisseau)

      if ( compteur % 45== 0) {//compteur pour faire apparaitre les vaisseau ennemie sur un intervalle de temps

        float tempalpha=radians(random(360));


        fight[nVaisseau] = new Vaisseau_mechant(0, width/2, -5, 6, tempalpha-radians(5), 25, 500, 50, 50);//creation du vaisseau ennemie
        nVaisseau += 1;//case de la liste

        if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
          nVaisseau = 0;//on revient à zero dans le tableau
        }


        fight[nVaisseau] = new Vaisseau_mechant(3, width/2, -5, 6, tempalpha+radians(5), 25, 500, 50, 50);//creation du vaisseau ennemie
        nVaisseau += 1;//case de la liste

        if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
          nVaisseau = 0;//on revient à zero dans le tableau
        }



        fight[nVaisseau] = new Vaisseau_mechant(3, width/2, -5, 6, tempalpha-radians(10), 25, 500, 50, 50);//creation du vaisseau ennemie
        nVaisseau += 1;//case de la liste

        if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
          nVaisseau = 0;//on revient à zero dans le tableau
        }



        fight[nVaisseau] = new Vaisseau_mechant(0, width/2, 5, 8, tempalpha+radians(10), 25, 500, 50, 50);//creation du vaisseau ennemie
        nVaisseau += 1;//case de la liste

        if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
          nVaisseau = 0;//on revient à zero dans le tableau
        }
      }

      //





      if ( compteur % 60== 0) {//compteur pour faire apparaitre les vaisseau ennemie sur un intervalle de temps   

        float tempalpha=radians(random(360));

        fight[nVaisseau] = new Vaisseau_mechant(1, width/2+100, 15, 8, tempalpha-radians(5), 30, 1000, 50, 50);//creation du vaisseau ennemie
        nVaisseau += 1;//case de la liste

        if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
          nVaisseau = 0;//on revient à zero dans le tableau
        }



        fight[nVaisseau] = new Vaisseau_mechant(1, width/2+120, 15, 8, tempalpha-radians(5), 35, 500, 50, 50);//creation du vaisseau ennemie
        nVaisseau += 1;//case de la liste

        if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
          nVaisseau = 0;//on revient à zero dans le tableau
        }



        fight[nVaisseau] = new Vaisseau_mechant(2, width/2-50, 140, 8, tempalpha+radians(15), 35, 500, 50, 50);//creation du vaisseau ennemie
        nVaisseau += 1;//case de la liste

        if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
          nVaisseau = 0;//on revient à zero dans le tableau
        }
      }







      if ( compteur % 100== 0) {//compteur pour faire apparaitre les vaisseau ennemie sur un intervalle de temps   

        float tempalpha=radians(random(360));

        fight[nVaisseau] = new Vaisseau_mechant(4, width/2, height/2, 6, tempalpha-radians(35), 90, 1000, 190, 190);//creation du vaisseau ennemie
        nVaisseau += 1;//case de la liste

        if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
          nVaisseau = 0;//on revient à zero dans le tableau
        }
      }



      if (nVaisseau >= nombre_vaisseau ) {//recyclage des vaisseaux
        nVaisseau = 0;//on revient à zero dans le tableau
      }  




      compteur += 1;//increment +1 au compteur





















      //boucle collision pojectil ennemie sur vaisseau hero
      if (mon_Timer.isFinished()) { //si le timer ne tourne pas

        //boucle for pour tester collision entre boule et hero
        for (int i=0; i<fight.length; i++)//boucle pour lire tableau vaisseau ennemi
        {

          if (fight[i] != null)//test nul pointer
          {

            for (int j=0; j<fight[i].boule.length; j++)
            {

              if (entrerEnCollisionAvec(mon_starship, fight[i].boule[j])  == true) 
              {


                explos1.trigger();

                image(a1, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a2, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a3, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a4, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a5, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a6, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a7, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a8, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a9, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a14, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a15, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a16, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a17, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a18, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);






















                ellipse(20, 20, 45, 34);//test collision dessin cercle en haut à gauche

                nombre_Vie=nombre_Vie-1;//perte de point de vie du vaisseau à chaque fois qu'il est touché

                mon_starship.xdep=width/2;//initialisation de la position vaisseau en x a chaque qu il touche
                mon_starship.ydep=height/2;//initialisation de la position vaisseau en y a chaque qu il touche

                if (nombre_Vie<=0) {

                  explos1.trigger();
                  explos1.trigger();
                  explos1.trigger();
                  explos1.trigger();
                  explos1.trigger();
                  explos1.trigger();

                  image(a1, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a2, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a3, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a4, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a5, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a6, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a7, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a8, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a9, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a10, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a11, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a12, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a13, mon_starship.xdep+15, mon_starship.ydep, 40, 40);
                  image(a10, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a11, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a12, mon_starship.xdep+15, mon_starship.ydep, 40, 40);
                  image(a13, mon_starship.xdep+15, mon_starship.ydep, 40, 40);
                  image(a14, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a15, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a16, mon_starship.xdep+15, mon_starship.ydep, 40, 40);
                  image(a17, mon_starship.xdep+15, mon_starship.ydep+15, 40, 40);
                  image(a18, mon_starship.xdep+15, mon_starship.ydep, 40, 40);
                  image(a10, mon_starship.xdep, mon_starship.ydep, 40+15, 40);
                  image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a12, mon_starship.xdep, mon_starship.ydep, 40+15, 40);
                  image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a11, mon_starship.xdep, mon_starship.ydep, 40+15, 40);
                  image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a10, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a11, mon_starship.xdep, mon_starship.ydep, 40+15, 40);
                  image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a10, mon_starship.xdep, mon_starship.ydep, 40+15, 40);
                  image(a11, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a12, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);
                  image(a13, mon_starship.xdep, mon_starship.ydep, 40, 40);

                  player.close();//arret musique
                  mon_starship.xdep=-5000;
                  mon_Timer6.reset();
                  ecran=2;
                  nombre_Vie=3;

                  score=0;
                }

                mon_Timer.demarer();
              }
            }
          }
        }
      }
















      //boucle for pour tester collision entre boule du vaisseau hero et vaisseau ennemi


      for (int i=0; i<mon_starship.boule.length; i++)//boucle pour lire tableau vaisseau ennemi
      {
        if (mon_starship.boule[i] != null) {//test nul pointer

          for (int j=0; j<fight.length; j++)
          {

            if (entrerEnCollisionAvec1(fight[j], mon_starship.boule[i])  == true) 
            {

              // effet sonor explosion
              explo1.trigger();

              ellipse(20, 20, 45, 34);//test collision dessin cercle en haut à gauche


              //affichage effet explosion sur vaisseau ennemie


              image(imagess1, fight[j].xdep-10, fight[j].ydep-18, 25, 25);

              image(images2, fight[j].xdep-10, fight[j].ydep-18, 35, 35);

              image(images3, fight[j].xdep-10, fight[j].ydep-18, 45, 45);

              image(images4, fight[j].xdep-10, fight[j].ydep-18, 45, 45);

              image(images5, fight[j].xdep-10, fight[j].ydep-18, 45, 45);

              image(images6, fight[j].xdep-10, fight[j].ydep-18, 55, 55);

              image (images7, fight[j].xdep-10, fight[j].ydep-18, 65, 65);















              fight[j].nombre_Vie_ennemie=fight[j].nombre_Vie_ennemie-1;//perte de point de vie des vaisseau ennemie à chaque fois qu'il est touché

              // ellipse(fight[j].xdep, fight[j].ydep, 35, 35);//cercle perte de vie vaisseau ennemie


              fight[j].point= fight[j].point*1;//calcul point pour chaque vaisseau
              score= score+fight[j].point;//score finale

              if (fight[j].nombre_Vie_ennemie<=0) {//condition qui verifie que ennemie plus de vie disparaisse

                //effet sonor explosion
                explo2.trigger();
                explo2.trigger();


                image(imagess1, fight[j].xdep-10, fight[j].ydep+20, 25, 25);

                image(images2, fight[j].xdep-10, fight[j].ydep+20, 35, 35);

                image(images3, fight[j].xdep-10, fight[j].ydep+20, 45, 45);

                image(images4, fight[j].xdep-10, fight[j].ydep+20, 45, 45);

                image(images5, fight[j].xdep-10, fight[j].ydep+20, 45, 45);

                image(images6, fight[j].xdep-10, fight[j].ydep+20, 55, 55);

                image (images7, fight[j].xdep-10, fight[j].ydep+20, 85, 85);



                image(imagess1, fight[j].xdep+35, fight[j].ydep, 25, 25);

                image(images2, fight[j].xdep+35, fight[j].ydep, 35, 35);

                image(images3, fight[j].xdep+35, fight[j].ydep, 45, 45);

                image(images4, fight[j].xdep+35, fight[j].ydep, 45, 45);

                image(images5, fight[j].xdep+35, fight[j].ydep, 45, 45);

                image(images6, fight[j].xdep+35, fight[j].ydep, 55, 55);

                image (images7, fight[j].xdep+35, fight[j].ydep, 85, 85);





                image(imagess1, fight[j].xdep-35, fight[j].ydep, 25, 25);

                image(images2, fight[j].xdep-35, fight[j].ydep, 35, 35);

                image(images3, fight[j].xdep-35, fight[j].ydep, 45, 45);

                image(images4, fight[j].xdep-35, fight[j].ydep, 45, 45);

                image(images5, fight[j].xdep-35, fight[j].ydep, 45, 45);

                image(images6, fight[j].xdep-35, fight[j].ydep, 55, 55);

                image (images7, fight[j].xdep-35, fight[j].ydep, 85, 85);





                image(imagess1, fight[j].xdep, fight[j].ydep+35, 25, 25);

                image(images2, fight[j].xdep, fight[j].ydep+35, 35, 35);

                image(images3, fight[j].xdep, fight[j].ydep+35, 45, 45);

                image(images4, fight[j].xdep, fight[j].ydep+35, 45, 45);

                image(images5, fight[j].xdep, fight[j].ydep+35, 45, 45);

                image(images6, fight[j].xdep, fight[j].ydep+35, 55, 55);

                image (images7, fight[j].xdep, fight[j].ydep+35, 115, 115);






                fight[j].xdep=width+1000;
                fight[j].ydep=height+1000;
              }
            }
          }
        }
      }






      if (mon_Timer.noFinished()) {

        ellipse(width/2, height-67, 78, 78);
      }









      if (mon_Timer6.isFinished()) {

        player.close();
        score1=score;
        mon_Timer6.reset();
        ecran=2;
        nombre_Vie=3;
        score=0;
      }


      //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    }
  }    



  //level 2
  else if (ecran==7) {

    background(255, 0, 255); 
    textSize (38);
    strokeWeight(10);//epaisseaur contour ecriture
    text("EN COURS DE DEVELOPPEMENT", width/2-300, height/2);
  }









  //level 3
  else if (ecran==8) {

    background(255, 0, 255); 
    textSize (38);
    strokeWeight(10);//epaisseaur contour ecriture
    text("EN COURS DE DEVELOPPEMENT", width/2-300, height/2);
  }












  //menu
  if (ecran==0) {


    background(image36);

    //bouton 1
    fill(200, 0, 255);  
    rect(width/2-120, height-height+300, longueur, largeur);
    fill(255, 255, 255);
    textSize (38);
    strokeWeight(3);//epaisseaur contour rectangle
    text("PLAY", width/2-88, 340);

    //bouton 2
    fill(200, 0, 255);
    rect(width/2-120, height-height+450, longueur, largeur); 
    fill(255, 255, 255);
    textSize (38);
    strokeWeight(3);////epaisseaur contour ecriture
    text("SCORE", width/2-105, height-height+492);

    //bouton 3
    fill(200, 0, 255);
    rect(width/2-120, height-height+600, longueur, largeur);
    fill(255, 255, 255);
    textSize (38);
    strokeWeight(3);//epaisseaur contour ecriture
    text("TEST", width/2-85, height-height+642);




    //bouton 4
    fill(200, 0, 255);
    rect(width/2-120, height-height+750, longueur, largeur);
    fill(255, 255, 255);
    textSize (38);
    strokeWeight(3);//epaisseaur contour ecriture
    text("EXIT", width/2-88, height-height+792);
  }









  //score
  else if (ecran==2) {
   
    
     
 
    background(image36);
    fill(200, 0, 255);
    rect(width/2-120, height-height+450, longueur+300, largeur); 
    fill(255, 255, 255);
    textSize (38);
    strokeWeight(3);////epaisseaur contour ecriture

    text("Votre score:", width/2-105, height-height+492);
    text(PApplet.parseInt( score1), width/2+120, height-height+492);//affichage score finale dans l onglet score
  }
  




  //bouton test
  else if (ecran==3) {

    background(image36);

    espace.display();



    mon_starship.display();//affichage vaisseau
  }





















  //bouton quitter
  else if (ecran==4) {

    background(255, 0, 255);
    fill(22);
  }







  //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}






























































































public void keyPressed() {//fonction qui permet de faire bouger vaisseau avec les differente touches assignées
  //deplacement haut et bas

  int k= ' ';

  if (key == 'z'|| key == 'Z') {
    haut=true;
  }

  if (key == 's'|| key == 'S') {
    bas=true;
  }

  //deplacement  gauche droite

  if (key == 'q'|| key == 'Q') {
    gauche =true;
  }
  if (key == 'd'|| key == 'D') {
    droit =true;
  }



  if (key ==k) {//touche espace
    shoot=true;
  }
  if (key ==k) {//touche espace
    shoot=true;
  }


  if ( keyCode == SHIFT) {

    ralentir=true; // on ralentit
  }

  if (keyCode == CONTROL) {

    accelerer=true; // on accelere
  }

  if (mon_Timer3.isFinished()) {

    if (key == 'r' || key =='R') {

      shout2=true;
      mon_Timer3.demarer();
    }
  }



  if (key==10) {


    if (ecran==2) {

      ecran=0;
    }

    if (ecran==3) {

      ecran=0;
    }


    if (ecran==5) {


      ecran=0;
    }
    if (ecran==6) {

      ecran=0;
    }
    if (ecran==7) {

      ecran=0;
    }
    if (ecran==8) {

      ecran=0;
    }
  }


  if (key=='1') {

    if (ecran==5) {

      mon_Timer6.demarer();
      ecran=6;
    }
  }

  if (key=='2') {

    if (ecran==5) {
      ecran=7;
    }
  }
  if (key=='3') {

    if (ecran==5) {

      ecran=8;
    }
  }
}






public void keyReleased() {

  //deplacement haut et bas
  int k= ' ';
  if (key == 'z'|| key == 'Z') {
    haut=false;
  }
  if (key == 's'|| key == 'S') {
    bas=false;
  }
  //deplacement  gauche droite

  if (key == 'q'|| key == 'Q') {
    gauche=false;
  }
  if (key == 'd'|| key == 'D') {
    droit=false;
  }
  if (keyCode == SHIFT) {

    ralentir=false; // speed vaisseau ralenti
  }
  if (keyCode ==CONTROL ) {
    ping4.trigger();
    accelerer=false; // speed vaisseau augmente
  }
  if (key ==k) {//touche espace
    shoot=false;
  }
  if (key == 'r' || key =='R') {

    shout2=false;
  }
}














public void mousePressed () {
  if (mouseButton == LEFT) {
    shout4=true;
  }  
  if (mouseButton == RIGHT) {
    shout3=true;
  }




  //position bouton menu---------------------------------------------------------------------------------------------------------------------------------------------------------------

  //play
  if (ecran==0) {
    //bouton 1
    if (mouseX >=width/2-120 && mouseX <=width/2-120+longueur && mouseY>=height-height+300 && mouseY <=height-height+300+largeur) //bouton 1
    {


      if (mouseButton ==LEFT) 
      {

        ecran=5;
      }
    }












    //bouton 2
    if (mouseX >=width/2-120 && mouseX <=width/2-120+longueur && mouseY>height-height+450 && mouseY <=height-height+450+largeur) //bouton 2
    {
      fill(255, 0, 0);
      if (mouseButton ==LEFT) 
      {
        fill(255, 255, 0);

        ecran=2;
      }
    }














    //bouton 3
    if (mouseX >=width/2-120 && mouseX <=width/2-120+longueur && mouseY>= height-height+600 && mouseY <= height-height+600+largeur) //bouton 3
    {
      fill(255, 0, 0);
      if (mouseButton ==LEFT) 
      {
        fill(255, 255, 0);

        ecran=3;
      }
    }
  }








  //bouton 4
  if (mouseX >=width/2-120 && mouseX <=width/2-120+longueur && mouseY>= height-height+750  && mouseY <=  height-height+750+largeur) //bouton 3
  {
    fill(255, 0, 0);
    if (mouseButton ==LEFT) 
    {
      fill(255, 255, 0);
      exit();
    }
  }


  //---------------------------------------------------------------------------------------------------------------------------------------------------------------
}







public void mouseReleased () {

  if (mouseButton == LEFT) {
    shout4=false;
  }  
  if ( mouseButton == RIGHT) {

    shout3=false;
  }
}























//collision projectile des vaisseau ennemie au vaisseau hero(mon_starship)
public boolean entrerEnCollisionAvec (Vaisseau hero, Projectil_rond  missile ) {//méthode pour gerer les collisions entre projectil et vaisseau

  if (missile!= null) {

    float distance = dist(missile.x, missile.y, hero.xdep-missile.diametre/2, hero.ydep-missile.diametre/2);//calcule distance entre position vaisseau enemie et projectil

    if (distance < 0 + missile.diametre/2) {//50.0=taille vaisseau et diametre=diametre projectil

      return true;
    } else
    {
      return false;
    }
  }   
  return false;
}  




















//collision projectile du vaisseau"hero" au vaisseau ennemi (mon_starship)
public boolean entrerEnCollisionAvec1 ( Vaisseau_mechant ennemie, Projectil_rond  boule ) {//méthode pour gerer les collisions entre projectil et vaisseau

  if (ennemie!= null) {

    float distance = dist(boule.x, boule.y, ennemie.xdep-boule.diametre/2, ennemie.ydep-boule.diametre/2);//calcule distance entre position vaisseau enemie et projectil



    if (distance < 0 + boule.diametre/2) {//50.0=taille vaisseau et diametre=diametre projectil

      return true;
    } else
    {
      return false;
    }
  }   
  return false;
}  




































public void stop() {//ferme chaque classe qui a été instanciée et arrêter l'objet minim. La raison est que chaque objet audio est traité dans un thread différent.



  // menu.close();
  player.close();
  minim.stop();
  super.stop();
}
//declaration parametre vaisseau
class Vaisseau_mechant {

  float xdep;
  float ydep;




  float longueur;
  float largeur;

  Projectil_rond[] boule;//n
  int nombre_Projectil;//n
  int nProjectil;//n
  int compteur2;

  int starship;
  int projectil;
  int nombre_Vie_ennemie;
  int point;
  boolean limite ;
  float angle;
  int vitesse;












  Vaisseau_mechant(int star, int tempX, int tempY, int speed, float alpha, int vie, int point0, int larg, int lon) {


    // alpha = -atan2(arriveY - ydep, arriveX - xdep); //on calcule l'angle dit alpha entre la bullet et l'objectif
    nProjectil=0; //compteur de la case dans le tableau
    nombre_Projectil=300; //nb cases dans le tableau de projectiles (nb max de projectile a l'ecran par ennemis)
    boule= new Projectil_rond[nombre_Projectil];//n
    compteur2=0;

    limite = true;

    starship = star;
    xdep=tempX;
    ydep=tempY;
    vitesse=speed;

    nombre_Vie_ennemie=vie;
    point=point0;
    largeur=larg;
    longueur=lon;
    angle=alpha;


    switch (starship) {

    case 0:
     //place pour d'eventuel variable permanente  du vaisseau 
      break;

    case 1:
     
      break;

    case 2:
      //place pour d'eventuel variable permanente  du vaisseau

      break;

    case 3:
     //place pour d'eventuel variable permanente  du vaisseau

      break;

    case 4:
     //place pour d'eventuel variable permanente  du vaisseau

      break;

    default:
     //place pour d'eventuel variable permanente  du vaisseau

      break;
    }
  }



  public void move() {


    if (limite==true) { 

      if (xdep<-100||ydep<-100||xdep>width+100||ydep>height+100) {



        limite=false;
      } else {

        xdep=cos(angle)*vitesse+xdep;//formule avec le cosinus pour pouvoir faire les trajectoires des vaisseau ennemiegrace au   cerlce trigonométrique
        ydep=sin(angle)*vitesse+ydep;//formule avec le sinus pour pouvoir faire les trajectoires des vaisseau ennemie grace au   cerlce trigonométrique
      }
    }
  }







  public void display() {//affichage vaisseau

    for (int i=0; i<boule.length; i++) {//n

      if (boule[i] != null) {
        boule[i].display();//n
      }//n
    }




    imageMode(CENTER);

    if (starship==0)
    {
      image(image, xdep, ydep, longueur, largeur);
      projectil=1;
      //limite=true;
    }


    if (starship==1)
    {
      image(image1, xdep, ydep, longueur, largeur);
      projectil=1;
      //limite=true;
    } 


    if (starship==2)
    {
      image(image2, xdep, ydep, longueur, largeur);
      projectil=2;
      //limite=true;
    } 


    if (starship==3)
    {
      image(image3, xdep, ydep, longueur, largeur);
      projectil=2;
      //limite=true;
    } 



    if (starship==4)
    {
      image(image4, xdep, ydep, longueur, largeur);
      projectil=0;
      //limite=true;
    } 


    imageMode(CORNER);






    tirer();
    move();


    compteur2 += 1;
  }    







  public void tirer() {//methode de la classe ennemie qui va choisir alternance des prjectiles

    switch (projectil) {

    case 0:


      if ( compteur2 % 15 == 0 ) {//n

        
        float tempAlpha = radians(random(360));
        float speed = random(5, 10);
        float rety = 60;

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 5, 10, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(5)*compteur2 *500, 10, 10, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha+radians(5)*compteur2*500, 15, 10, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(10)*compteur2*500, 20, 10, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(15)*compteur2*500, 25, 10, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(15)*compteur2*500, 30, 10, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }


        if ( compteur2 % 15 ==0) {

          boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(0), rety, speed, 0, 0); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(5), rety, speed, 0, 0); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(5), rety, speed, 0, 0); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(15), rety, speed, 0, 0); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(20), rety, speed, 0, 0); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(25), rety, speed, 0, 0); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
        }
      }//n




      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
      break;





    case 1:

      if ( compteur2 % 30 == 0 ) {//n

       

        float tempAlpha = radians(random(360));
        float speed = random(2, 10);

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(5), 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha+radians(5), 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }
      }//n


      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
      break;






    case 2:

      if ( compteur2 % 60 == 0 ) {//n
        

        float tempAlpha = radians(random(360));
        float speed = random(2, 10);

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 30, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 30, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }
        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 30, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }
        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 30, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }
        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 30, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }
      }//n


      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
      break;





    case 3:

      if ( compteur2 % 60 == 0 ) {//n
        

        float tempAlpha = radians(random(360));
        float speed = random(2, 10);

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(5), 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha+radians(5), 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }
      }//n


      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
      break;



    case 4:

      if ( compteur2 % 60 == 0 ) {//n
        

        float tempAlpha = radians(random(360));
        float speed = random(2, 10);

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(5), 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha+radians(5), 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }
      }//n


      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
      break;




    default:

      if ( compteur2 % 60 == 0 ) {//n
       

        float tempAlpha = radians(random(360));
        float speed = random(2, 10);

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha, 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha-radians(5), 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }

        boule[nProjectil] = new Projectil_rond(xdep, ydep, tempAlpha+radians(5), 20, speed, 0, 0); 
        nProjectil += 1;//n
        if (nProjectil>=nombre_Projectil) {
          nProjectil=0;
        }
      }//n


      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
      break;
    }
  }
}   
class Timer {//classe pour arreter,reset ou demarer le temps pour creer des evenement avec leur propre boucle temporelle
//pour cette faire cette classe, j ai repris la methode de la fonction millis pour en faire des outils qui peuvent ou pas me servire dans le code
//je precise certains outils ne me servent pas  pour l'instant 

  int tempsSauvegarder;//varaible sauvegarde
  int totalTemps;//variable temps totale
  int tempsPasse;//variable temps totale
  boolean tempsCommence, tempsStoppe;//commence temps ou arreter




  Timer(int tempTotalTime) {//constructeur
    totalTemps = tempTotalTime;
    tempsCommence = false;
    tempsStoppe = true;
  }




  public void demarer() {//methode pour commencer chrono
    if (tempsStoppe) {
      tempsSauvegarder = millis();
      tempsCommence = true;
      tempsStoppe = false;
    }
  }





  public void arreter() {//methode pour arreter chrono
    tempsStoppe = true;
    tempsCommence = false;
  }




  public void reset() {//methode pour reset
    tempsSauvegarder = millis();
  }




  public boolean noFinished() {//methode pour qu une action s exute le temps qu on veut
    if (tempsCommence) {
      tempsPasse = millis()- tempsSauvegarder;
      if (tempsPasse <= totalTemps) {
        tempsCommence = true;
        tempsStoppe = false;
        return true;
      } else {
        return false;
      }
    } else {
      return false;
    }
  }



  public boolean isFinished() {//methode pour dire qu au bout d un temps donne on fait des truc
    if (tempsCommence) {
      tempsPasse = millis()- tempsSauvegarder;
      if (tempsPasse > totalTemps) {
        tempsCommence = false;
        tempsStoppe = true;
        return true;
      } else {
        return false;
      }
    } else {
      return true;
    }
  }
}
class Fond_ecran {//classe pour faire un ecran anime(mette une vitesse à son ecran)
//initialisation des variables
  int x;
  int y;


  int xdep;
  int ydep;



  int vitesseY;


  int vitesseY2;





  Fond_ecran() {//constructeur


    x=0;
    y=0;

    vitesseY=10;


    xdep=0;
    ydep=-6324;

    vitesseY2=10;
  }









  public void display() {//affichage


    move();//mouvement

    //j ai affiché ces images comme des objets pour leur appliquers une vitesses
    //Les deux image sont identique et des tres grande taille(1700*6324) pour eviter de voir changement image lors de transition
    image(images1, 0, y );

    image(images, 0, ydep);





    if (y>=0||ydep>=-6324) {//condtion pour que image avance
      ydep=ydep+vitesseY2;
      y=y+vitesseY;
    }



    if (y>=6324||ydep>=6324) {// condition pour que image revienne au point de depart


      y=0;
      ydep=-6324;
    }
  }






  public void move() {//methode pour faire avancer image

    ydep=ydep+vitesseY2;  
    y=y+vitesseY;
  }
}

class Projectil_rond {//classe projectile avec ses parametres



  float x;//position projectile
  float y;//possition projectile


  float diametre;//diametre projectil
  float vitesse;//vitesse projectile
  float angle;//angle projectile pour faire trajectoire
  int type_projectil;
  boolean limite;
  int projectil_hero;




  Projectil_rond(float tempX, float tempY, float alpha, float rety, float speed, int proj, int proj1) {//methode pour pouvoir appeler n importe ou les parametres projectile




    x = tempX;//la variable x egale à tempX
    y = tempY;//la variable y egale à tempY


    angle = alpha;//variable angle egale à alpha
    vitesse = speed;//variable vitesse egale à speed
    diametre =rety;//variable diametre egale à rety(dimension)
    type_projectil=proj;//projectil pour vaisseau ennemie
    projectil_hero=proj1;//projectile pour vaisseau hero
    limite=true; //verification si projectile sont hors de l ecran ou pas
  }



  public void move() {//methode pour faire avancer projectil


    switch(projectil_hero) {

    case 0://projectile vaisseau ennemie
   //condition pour optimiser le jeu et faire que les projectiles disparaisse rapidement pour eviter les lags
      if (limite==true) {//n

        if (x<-60 ||y<-60||x>width+30||y>height+30) {//n

          limite=false;//n
        }//n

        else {//n


          x=cos(angle)*vitesse+x;//formule avec le cosinus pour pouvoir faire les trajectoires des projectiles grace au   cerlce trigonométrique
          y=sin(angle)*vitesse+y;//formule avec le sinus pour pouvoir faire les trajectoires des projectiles grace au   cerlce trigonométrique
        } //n
      }//n

      break;



    case 1://projectile vaisseau hero
       //condition pour optimiser le jeu et faire que les projectiles disparaisse rapidement pour eviter les lags
      if (limite==true) {//n

        if (x<0 ||y<0||x>width||y>height) {//n

          x=width+2000;
          limite=false;//n
        }//n

        else {//n


          x=cos(angle)*vitesse+x;//formule avec le cosinus pour pouvoir faire les trajectoires des projectiles grace au   cerlce trigonométrique
          y=sin(angle)*vitesse+y;//formule avec le sinus pour pouvoir faire les trajectoires des projectiles grace au   cerlce trigonométrique
        } //n
      }//n

      break;
    }
  }  


  public void display() {//methode affichage projectile






    switch(type_projectil) {//Choisir image projectile en fonction du type de vaisseau

    case 0:

      image(image_Proj, x, y, diametre, diametre);  //parametre de l'image importer(projectil pour vaisseau ennemi
      move();//faire bouger projectile

      break;

    case 1:

      image(image_Proj1, x, y, diametre, diametre);  //parametre de l'image importer(projectile pour vaisseau "hero")
      move();//faire bouger projectile

      break;
    }
  }
}      
class Vaisseau {//classe du vaisseau




  float xdep;//variable depart vaisseau
  float ydep;//variable depart vaisseau
  float vitesse;//variable vitesse
  float longueur;//variable taille
  float largeur;//variable taille
  PImage image;//importer une image
  int vie;//variable qui stocke vie pour le switch
  float alpha1 ;//variable qui sotcke l'angle


  //varaible pour creation projectil,compteur,nombre projectil...
  Projectil_rond[] boule;//n
  int nombre_Projectil;//n
  int nProjectil;//n
  int compteur2;




  Vaisseau() {//contructeur vaisseau


    nProjectil=0; //compteur de la case dans le tableau
    nombre_Projectil=50; //nb cases dans le tableau de projectiles (nb max de projectile a l'ecran par ennemis)
    boule= new Projectil_rond[nombre_Projectil];//n
    compteur2=0; 

    xdep= 400; //valeur de la variable 
    ydep= 650; //valeur de la variable 
    vitesse=18;//valeur de la variable 
    image=loadImage("cerf.png");//chargement image vaisseau
    longueur=60;//valeur de la variable 
    largeur=60;//valeur de la variable
  }



  public void display() {//methode affichage de la classe



    rotation_Vaisseau();//appelle methode vaisseau
    //ellipse(xdep,ydep,28,28);//creation d'un cercle pour test collision et voir les zones touchées


    for (int i=0; i<boule.length; i++) {//n

      if (boule[i] != null) {
        boule[i].display();//n
      }//n
    }

    compteur2 += 1; 


    //condition mouvement vaisseau    

    if (xdep>(width-(longueur))) {// limite cote droit
      xdep=width-longueur;
    }

    if (ydep>(height-largeur)) {// limite cote bas
      ydep=height-largeur;
    }

    if (xdep<0) {//limite bord gauche
      xdep=0;
    }

    if (ydep<0) {//limite bord haut
      ydep=0;
    }




    //condition qui  verifie et donne les instructions pour faire avancer vaisseau

    if ( haut == true) {//condition qui verifie que haut est vrai
      ydep=ydep - vitesse;//deplacement vaisseau avec position y de depart et sa vitesse
    }


    if ( droit == true) {//condition qui verifie que droit est vrai
      xdep=xdep + vitesse;//deplacement vaisseau avec position x de depart et sa vitesse
    }


    if ( gauche == true) {//condition qui verifie que gauche est vrai
      xdep=xdep - vitesse;//deplacement vaisseau avec position x de depart et sa vitesse
    }


    if ( bas == true) {//condition qui verifie que bas est vrai
      ydep=ydep + vitesse;//deplacement vaisseau avec position y de depart et sa vitesse
    }


    //faire ralentir vaisseau
    if (ralentir==true) {

      vitesse=4;
    } else if (ralentir==false) {
      vitesse=10;
    }


    //faire accelerer vaisseau
    if (accelerer==true) {
     
      vitesse=35;
    }       











    //tire vaisseau allie  

    if (shoot==true) {

      if (mon_Timer2.isFinished()) {
        ping.trigger();

        if ( compteur2 % 1 == 0 ) {//n

          //float tempAlpha = 0;
          float speed = 15;

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2, 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(5), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
        }//n
        mon_Timer2.demarer();
      }

      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
    }


    //tire vaisseau 3
    if (shout3==true) {

      if (mon_Timer4.isFinished()) {

        ping1.trigger();
        if ( compteur2 % 1 == 0 ) {//n

          //float tempAlpha = 0;
          float speed = 15;

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2, 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(5), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(5), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(10), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(10), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
        }//n
        mon_Timer4.demarer();
      }

      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
    }




    //tire vaisseau 4
    if (shout4==true) {

      if (mon_Timer5.isFinished()) {

        ping2.trigger();

        if ( compteur2 % 1 == 0 ) {//n

          //float tempAlpha = 0;
          float speed = 15;

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2, 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(65), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(5), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(10), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(10), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(15), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(15), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(65), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(20), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(25), 35, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
        }//n
        mon_Timer5.demarer();
      }

      if (nProjectil >= nombre_Projectil ) {

        nProjectil = 0;
      }
    }


































   




    if (shout2==true) {

      if (mon_Timer1.isFinished()) {

        ping3.trigger();

        if ( compteur2 % 1 == 0 ) {//n

          //float tempAlpha = 0;
          float speed = 10;

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2, 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(5), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(65), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(15), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(15), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(20), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(20), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(40), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(40), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(45), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(5), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(10), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }


          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(10), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(15), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(15), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2, 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(5), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(30), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }


          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(40), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2-radians(50), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }

          boule[nProjectil] = new Projectil_rond(xdep-20, ydep-10, alpha1-PI/2+radians(55), 55, speed, 1, 1); 
          nProjectil += 1;//n
          if (nProjectil>=nombre_Projectil) {
            nProjectil=0;
          }
        }//n
        mon_Timer1.demarer();
      }
    }


    if (nProjectil >= nombre_Projectil ) {

      nProjectil = 0;
    }
    









    //condition chargement tir shout2

    if (shout2==true) {

      if (mon_Timer3.noFinished()) {

        shout2= false;
      } else {
      }
    }












































    //condition  pour defenir ce qu il se passera si le vaisseau perd des vies
    if (nombre_Vie==3) {

      vie=3;
    }

    if (nombre_Vie==2) {

      vie=2;
    }
    if (nombre_Vie==1) {

      vie=1;
    }
    if (nombre_Vie<=0) {
      
     
     
       
      vie=0;
      
      
     
      
    }



    point_vie();//appelle methode qui affiche les points de vie
  }





  public void point_vie() {  //methode point de vie vaisseau qui affiche les cercles corespondant au point de vie

    //cercle point de vie test

    switch (vie) {

    case 0: 

      ellipse(xdep+29, ydep+55, 0, 0);



      break;




    case 1: 


      ellipse(xdep, ydep+30, 10, 10);
      fill(255, 0, 0);


      break;





    case 2: 

      ellipse(xdep-15, ydep+30, 10, 10);
      fill(255, 0, 0);
      ellipse(xdep+15, ydep+30, 10, 10);
      fill(255, 0, 0);


      break;




    case 3: 

      ellipse(xdep-15, ydep+30, 10, 10);
      fill(255, 0, 0);
      ellipse(xdep, ydep+30, 10, 10);
      fill(255, 0, 0);
      ellipse(xdep+15, ydep+30, 10, 10);
      fill(255, 0, 0);


      break;




    default:

      ellipse(xdep-15, ydep+30, 10, 10);
      fill(255, 0, 0);
      ellipse(xdep, ydep+30, 10, 10);
      fill(255, 0, 0);
      ellipse(xdep+15, ydep+30, 10, 10);
      fill(255, 0, 0);




      break;
    }
  } 





  public void rotation_Vaisseau() {//methode pour faire tourner à 360 degres notre vaisseau
//On aurait put prendre la methode avec les fonctions pushmatrix mais cette methode marche plutot bien

    imageMode(CENTER);


    alpha1= atan2(mouseY-ydep, mouseX-xdep) +PI/2;//on calcule l angle  alpha entre le vaisseau et la souris et on y ajoute PI/2
    //l'angle de l'image est pris à partir de son coté droit 
    imageMode(CENTER);

    translate(xdep, ydep);//on déplace le 0,0 du repère à xdep et ydep 
    rotate(alpha1);//on tourne l'enssemble du repère géométrique de alpha radian

    image(image, 0.0f, 0.0f, largeur, longueur);

    rotate(-alpha1);//on revient à l'orientation de base
    translate(-xdep, -ydep);//on revient au 0 normale

    imageMode(CORNER);//on calcule par le coin
  }










 }
  public void settings() {  fullScreen();  smooth(); }
  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "ennemie_bouger_test" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}
