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

import ddf.minim.*; 
import ddf.minim.analysis.*; 
import ddf.minim.effects.*; 
import ddf.minim.signals.*; 
import ddf.minim.spi.*; 
import ddf.minim.ugens.*; 

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 jeux_video extends PApplet {






//fichier son



Ennemie mechant;
Ennemie mechant2;
projectile balle;
AudioPlayer uneMusique;// musique
Minim minim;
AudioSample unSon;
AudioSample boom;
projectileennemie balle2;
fire feu;
laser superlaser;



 
// Position en X de l'avion
float x = 80;
float y = 400;
PImage plane;
PImage balleok;
PImage laserok;
PImage carrenoir;
PImage feuok;
PImage imgFond;
PImage coeurjouer;
PImage coeurmechant;
int ecran = 0;
PImage explosion;
PImage menu;
boolean tirer= true;
boolean tirerlaser=true;
boolean lanceflamme=true;
boolean tirennemie = true;
float compteur = 0;
float score;
int vie= 100;
int vieennemie=1000;




public void setup()
{
  // Configuration de la fenêtre et des couleurs
  
  background(255);
  musique();
  
  if (ecran == 0) 
  {
    menu = loadImage("images/MENU2.png");
    menu.resize(width, height);
    image(menu, 0, 0);
    initialisation();    
  }
}



public void draw() //changement ecran
{
  
  if(key == 'm'|| key == 'M'){
      ecran = 0;
     }
  
  
  if (key == 'A'|| key == 'a')
    {
      ecran = 1;
    }
      if (ecran == 0) // menu
    {
    }
      if (ecran == 1) // jeu
    {
      jeu();
      compteur();
    }
    if (mechant.px<0 || vie <= 0)
    {
       ecran = 2;
    }
    if(ecran == 2) // ecran de defaite
    {
      background(255,0,0);
      fill(255,255,255);
      text("Tu as perdu", width/2-30,height/2);
      text("clique sur P pour rejouer", width/2-30,height/2+30);
      textSize(32);
      compteur();
      text(score,width/1.5f,40);
          if(key == 'p'|| key == 'p')
      {
      x= 80;
      y=400;
      mechant.px= width*0.9f;
      mechant.py= height/2;
      vie= 100;
      vieennemie=1000;
      ecran = 1;
      compteur = 0;
      score = 0;
      balle2.dx=height+15000;
      balle.cx=width+3230;
      feu.ex=width+3650;
      superlaser.fx=width+14500;
      }
    }
    if ( mechant.px>width||vieennemie <= 0)
    {
    ecran = 3;
    }
    if(ecran == 3) // ecran de victoire
    {   
       background(0,0,255);
       fill(255,255,255);
       text("Tu as gagné", width/2-60,height/2);
       text("clique sur P", width/2-60,height/2+30);
       textSize(32);
       text(score,width/1.5f,40);
    
      if(key == 'p'|| key == 'p')
      {
      x= 80;
      y=400;
      mechant.px= width*0.9f;
      mechant.py= height/2;
      vie= 100;
      vieennemie=1000;
      ecran = 1;
      score = 0;
      compteur = 0 ;
      balle2.dx=height+15000;
      balle.cx=width+3230;
      feu.ex=width+3650;
      superlaser.fx=width+14500;
       }
    }
}

 
//commande 
public void keyPressed() 
  {
    if (ecran == 1)
      {
        if (keyCode == UP)
        {
          if(testColision(x,y-10) == 0)
           {
             y= y - 20;
           }
        }
      if (keyCode == DOWN)
      {
        if(testColision(x,y+10) == 0)
        {
         y= y + 20;
        }
      }
     if (keyCode == RIGHT)
     {
       if(testColision(x+10,y) == 0)
       {
         x= x + 20;
       }
     }
     if (keyCode == LEFT)
     {
       if(testColision(x-10,y) == 0)
       {
         x= x - 20;
       }
     }
     if((key == 'F'|| key == 'f') && tirer==true)
     {
       balle.cx=x;
       balle.cy=y;
       unSon.trigger();
     }
     if((key == 'D'|| key == 'd') && tirerlaser==true)
     {
       superlaser.fx=x;
       superlaser.fy=y;
       unSon.trigger();
     }
     if((key == 'S'|| key == 's')&& lanceflamme==true)
     {
       feu.ex=x;
       feu.ey=y;
       unSon.trigger();
     }
   }
}
public void mouseClicked()
{
  if (mouseX>width-700 && mouseX< width-240 && mouseY > height -740 && mouseY<height -570)
    {
      ecran = 1;
    }
      if (mouseX>width-700 && mouseX< width-240 && mouseY > height -380 && mouseY<height -235)
    {
      exit();
    }
}

// mur invisible
  public float testColision(float xTest,float yTest)
{
  if(xTest < 80  || xTest>height-400)
  {
    return 1;
  }
    if(yTest < 50  || yTest>width-620)
  {
    return 1; 
  }
    return 0;
}
 public void compteur() {
   
   if (ecran== 1)
   {
    compteur = compteur +0.0166666666666667f;
    fill(255);
    text(compteur,width/2,40);
    textSize(32);
    text(score,width/1.5f,40);
    textSize(32);
    text(vie,width/20 ,40);
    text(vieennemie,width/1.1f,40);
  
   }  if (ecran == 2|| ecran==3 )
  {
    compteur= compteur + 0;
    fill(255);
    text(compteur,width/2,40);
    textSize(32);
  }
 }
  
 public void musique()
 {
   minim = new Minim(this); 
   // Chargement des fichiers son
   uneMusique = minim.loadFile("sons/Sky Portal.mp3");//musique
   uneMusique.loop();//jouer musique
   unSon = minim.loadSample("sons/tir.mp3");
   boom = minim.loadSample("sons/explosion.wav");
 }
 
 public void initialisation()
 {
   mechant = new Ennemie(width*0.9f , height/2); //initialise un ennemie qu'on appel mechant et le met a droite de l'ecran
   balle = new projectile(-100,-100); // initialisation des munition
   balle2 = new projectileennemie(-100,-100); // initialisation des munition
   feu=new fire(-100,-100);
   superlaser=new laser(-100,-100);
   // chargement des images
   plane = loadImage("images/Starfighter.png");
   imgFond = loadImage("images/sky1.png");
   explosion = loadImage("images/explosion0.png");
   imgFond.resize(width, height);
   carrenoir = loadImage("images/carre noir.png");
   balleok = loadImage("images/balleok.png");
   feuok = loadImage("images/feuok.png");
   laserok = loadImage("images/laserok.png");
   coeurjouer = loadImage("images/corazon.png");
   coeurmechant= loadImage("images/corazonnoir.png");
 }
 
 public void jeu()
 {
   imageMode(CORNER);
   // Effacement de l'écran
   image(imgFond, 0, 0);
   imageMode(CENTER);
   // placement des objet de class
   mechant.seDessiner();
   balle.seDessiner();
   balle2.seDessiner();
   feu.seDessiner();
   superlaser.seDessiner();
  
   // Dessin de l'avion
   image(plane,x, y);
   
   //image munition
   if (tirer == true) 
   {
     image(balleok,width-1500, 20);
   }
   else 
   {
    image(carrenoir,width-1500, 20); 
   }
      if (lanceflamme == true) 
   {
     image(feuok,width-1560, 20);
   }
   else 
   {
    image(carrenoir,width-1560, 20); 
   }
      if (tirerlaser == true) 
   {
     image(laserok,width-1530, 20);
   }
   else 
   {
    image(carrenoir,width-1530, 20); 
   }
   if( (superlaser.fx > mechant.px-75 && superlaser.fx < mechant.px+75 && superlaser.fy > mechant.py-75 && superlaser.fy< mechant.py+75)||(feu.ex > mechant.px-75 && feu.ex < mechant.px+75 && feu.ey > mechant.py-75 && feu.ey< mechant.py+75)||(balle.cx > mechant.px-75 && balle.cx < mechant.px+75 && balle.cy > mechant.py-75 && balle.cy< mechant.py+75))
  {
     image(explosion,mechant.px,mechant.py);
  }
  else
  {
     image(explosion,-1500,-1500);
  }
  
 
  //vie
   image(coeurjouer,width-1830, 20);
   image(coeurmechant,width-182, 20);
   
   //collision jouer-ball
   if (balle2.dx > x-50 && balle2.dx < x+50 && balle2.dy > y-50 && balle2.dy< y+50)
   {
     image(explosion,x,y);
     mechant.px=mechant.px-65;
     boom.trigger();
     balle2.dx=height+15000;
     score= score - 65;
     vie = vie - 25;
   }
   //clossision mechant-ball
   if (balle.cx > mechant.px-75 && balle.cx < mechant.px+75 && balle.cy > mechant.py-75 && balle.cy< mechant.py+75)
   {
     image(explosion,mechant.px,mechant.py);
     boom.trigger();
     mechant.px=mechant.px+65;
     balle.cx=width+3230;
     balle2.dx=mechant.px;
     balle2.dy=mechant.py;
     unSon.trigger();
     score= score + 65;
     vieennemie=vieennemie - 65;
   }
   //collision mechant-feu
  if (feu.ex > mechant.px-75 && feu.ex < mechant.px+75 && feu.ey > mechant.py-75 && feu.ey< mechant.py+75)
  {
    image(explosion,mechant.px,mechant.py);
    boom.trigger();
    mechant.px=mechant.px+20;
    feu.ex=width+3650;
    balle2.dx=mechant.px;
    balle2.dy=mechant.py;
    unSon.trigger();
    score= score + 30;
    vieennemie=vieennemie - 30;
  }   
  //collision mechant-laser
  if (superlaser.fx > mechant.px-75 && superlaser.fx < mechant.px+75 && superlaser.fy > mechant.py-75 && superlaser.fy< mechant.py+75)
  {
    image(explosion,mechant.px,mechant.py);
    boom.trigger();
    mechant.px=mechant.px+30;
    superlaser.fx=width+14500;
    balle2.dx=mechant.px;
    balle2.dy=mechant.py;
    unSon.trigger();
    score= score + 30;
    vieennemie=vieennemie - 30;
    
  } 
  if((key == 'S'|| key == 's') && lanceflamme == true){   
    lanceflamme=false;
    }
 if (feu.ex> width) {
   lanceflamme=true;
 }
   if((key == 'D'|| key == 'd') && tirerlaser == true){   
    tirerlaser=false;
    }
 if (superlaser.fx > width) {
   tirerlaser=true;
 }
    if((key == 'F'|| key == 'f') && tirer == true){
    tirer=false;
  
    }
 if (balle.cx > width) {
   tirer=true;
 }
}


 
class Ennemie
{
  
float px;
float py;
float vitesse = 4;
boolean sens;
PImage mechant;





Ennemie(float tempX, float tempY) {
  
 mechant = loadImage("images/preview.png");
 px = tempX;
 py = tempY;
} 




public void deplacement(){
  
 py = py + vitesse;
 if (py < 80) {
  vitesse = 4;
  px=px-40;
 }
 
 if (py > height-80) {
  vitesse =-4;
  px=px-40;
  }
}
   
   
   
public void seDessiner(){
      image(mechant,px,py);
      deplacement();
   }
};
class fire{ // feu
  float ex;
float ey;
float speed = 20;
 PImage imagefeu;

 fire(float x,float y) {
   ex= x;
   ey= y;
   imagefeu= loadImage("images/efecto_fuego_00009.png");
 }


     public void seDessiner(){
       image(imagefeu,ex,ey);
       ex = ex + 50;
     }
};
class laser{  //laser
    float fx;
float fy;
float speed = 10;
 PImage balle;

 laser(float x,float y) {
   fx= x;
   fy= y;
   balle= loadImage("images/beams.png");
 }


     public void seDessiner(){
       image(balle,fx+5,fy-50);
       fx = fx + 15;
        image(balle,fx+5,fy+50);
       fx = fx + 10;
}
};
class projectile { // balle
  
float cx;
float cy;
float speed = 10;
 PImage balle;

 projectile(float x,float y) {
   cx= x;
   cy= y;
   balle= loadImage("images/cannon ball.png");
 }


     public void seDessiner(){
       image(balle,cx+30,cy-10);
       cx = cx + 2;
        image(balle,cx+26,cy+10);
       cx = cx + 2;
     }
      // }
         //if(cx > 1200 && keyCode == 'F'){
         //cx = x;
       // }
};
class projectileennemie {   // balle machant
  
float dx;
float dy;
float vitesse = 3;
 PImage balle2;

 projectileennemie(float px,float py) {
   dx= px;
   dy= py;
   balle2= loadImage("images/cannon ballennemie.png");
 }


     public void seDessiner()
     {
       image(balle2,dx+30,dy-50);
       dx = dx - vitesse;
       image(balle2,dx+30,dy+50);
       dx = dx - vitesse;
       image(balle2,dx+50,dy-75);
       dx = dx - vitesse;
       image(balle2,dx+50,dy+75);
       dx = dx - vitesse;
       image(balle2,dx+10,dy);
       dx = dx - vitesse;

     }
      // }
         //if(cx > 1200 && keyCode == 'F'){
         //dx = px;
       // }
};
  public void settings() {  fullScreen(); }
  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "jeux_video" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}
