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

 




 //Importation de la librairie pour les sons
Argent billetDeVingt;
Argent billetDeDix;
Argent billetDeCinq;
Argent billetDeUn;
Argent billetDeCinquante;
Argent billetDeCent;
Argent billetDeDeuxCent;
Argent billetDeCinqCent; // Création des objets de la classe Argent (Pour les billets)
ArgentDeux amelioration; // Création de l'objet "amélioration" de la classe ArgentDeux (Pour le fonctionnement des billets bonus)
Heros gars; //Création de l'objet "gars" de la classe Heros (pour le personnage)
Ecran fenetre; //Création de l'objet "fenetreé de la classe Ecran (Pour switcher entre les "onglets")
Shop boutique; //Création de l'objet boutique pour la classe Shop (Pour la section boutique)
Minim minim;
AudioSample bruitBouton;
AudioPlayer sonFin;
AudioPlayer sonHistoire;
AudioPlayer sonShop;
AudioSample bruitAchat;
AudioPlayer sonJeu;
boolean droite = true; //Boolean pour la position des coeurs en dessous du personnage (voir void keyPressed() dans jeu.pyde)
boolean gauche = false;
PImage background; //Déclaration images
PImage coeur;
PImage shop;
PImage moula;
PImage boutiqueCent;
PImage boutiqueDeuxCent;
PImage boutiqueCinqCent;
PImage bulleFour;
PImage bulleAcheter;
PImage vitrine;
PImage ameliorationHeart;
PImage ameliorationSpeed;
PImage ameliorationBilletMax;
PImage ameliorationHeartMax;
PImage ameliorationSpeedMax;
PImage gameOver;
PImage bulleGameOver;
PImage backgroundAirPort;
PImage ticket;
PImage grandeVitrine;
PImage bulleEcranQuatre;
PImage backgroundHistoire;
PImage chat;
PImage bulleTrois;
PImage bulleHuit;
PImage livre;
PImage bulleHistoire;
int ecran = 2; //Pour afficher le Menu principal
PFont fontPixel; //Déclaration de la police d'écriture (pixellisé)
public void setup(){
    //Pour mettre le jeu en pleine écran
   //A supprimer (c'était pour les tirs)
  fontPixel = createFont("Pixellari.ttf",128);  //Pour charger la police d'écriture
  background = loadImage("background.png");  //Pour charger les images
  coeur = loadImage("heart.png");
  shop = loadImage("shop.png");
  moula = loadImage("money.png");
  boutiqueCent = loadImage("billetdecenthm.png");
  boutiqueDeuxCent = loadImage("billetdedeuxcenthm.png");
  boutiqueCinqCent = loadImage("billetdecinqcenthm.png");
  bulleFour = loadImage("bulle.png");
  bulleAcheter = loadImage("bulleAcheter.png");
  vitrine = loadImage("vitrine.png");
  ameliorationHeart = loadImage("hearthm.png");
  ameliorationSpeed = loadImage("vitessehm.png");
  ameliorationBilletMax = loadImage("billethmmax.png");
  ameliorationHeartMax = loadImage("hearthmmax.png");
  ameliorationSpeedMax = loadImage("vitessehmmax.png");
  gameOver = loadImage("gameover.PNG");
  bulleGameOver = loadImage("bullegameover.png");
  backgroundAirPort = loadImage("backgroundAirPort.png");
  ticket = loadImage("ticket.PNG");
  grandeVitrine = loadImage("grandeVitrine.png");
  bulleEcranQuatre = loadImage("bulleShopEcranQuatre.png");
  backgroundHistoire = loadImage("backgroundHistoire.png");
  chat = loadImage("chat.png");
  bulleTrois = loadImage("bulleTrois.png");
  bulleHuit = loadImage("bulleHuit.png");
  livre = loadImage("livre1.png");
  bulleHistoire = loadImage("bulleHistoire.png");
  gars = new Heros(); //Déclaration objets
  boutique = new Shop();
  fenetre = new Ecran();
  amelioration = new ArgentDeux();
  minim = new Minim(this);
  bruitBouton = minim.loadSample("menuClick.aiff"); //Pour charger les sons
  bruitAchat = minim.loadSample("sonBuy.wav");
  sonFin = minim.loadFile("sonFin.wav");
  sonHistoire = minim.loadFile("sonHistoire.mp3");
  sonShop = minim.loadFile("sonShop.mp3");
  sonJeu = minim.loadFile("sonJeu.mp3");
  billetDeVingt = new Argent(); //Déclaration + paramètrages des billets
  billetDeVingt.montant = 20;
  billetDeVingt.posX = PApplet.parseInt(random(10,1850));
  billetDeVingt.posY = 0;  
  billetDeVingt.vitesse = 4;
  billetDeVingt.photo = loadImage("billetdevingt.png");
  
  billetDeDix = new Argent();
  billetDeDix.montant = 10;
  billetDeDix.posX = PApplet.parseInt(random(10,1850));
  billetDeDix.posY = 0;
  billetDeDix.vitesse = 4;
  billetDeDix.photo = loadImage("billetdedix.png");

  billetDeCinq = new Argent();
  billetDeCinq.montant = 5;
  billetDeCinq.posX = PApplet.parseInt(random(10,1850));
  billetDeCinq.posY = 0;
  billetDeCinq.vitesse = 4;
  billetDeCinq.photo = loadImage("billetdecinq.png");

  billetDeCinquante = new Argent();
  billetDeCinquante.montant = 50;
  billetDeCinquante.posX = PApplet.parseInt(random(10,1850));
  billetDeCinquante.posY = 0;
  billetDeCinquante.vitesse = 2;
  billetDeCinquante.photo = loadImage("billetdecinquante.png");

  billetDeCent = new Argent();
  billetDeCent.montant = 100;
  billetDeCent.posX = billetDeCinq.posX = PApplet.parseInt(random(10,1850));
  billetDeCent.posY = 0;
  billetDeCent.vitesse = 2;
  billetDeCent.photo = loadImage("billetdecent.png");

  billetDeDeuxCent = new Argent();
  billetDeDeuxCent.montant = 200;
  billetDeDeuxCent.posX = billetDeCinq.posX = PApplet.parseInt(random(10,1850));
  billetDeDeuxCent.posY = 0;
  billetDeDeuxCent.vitesse = 2;
  billetDeDeuxCent.photo = loadImage("billetdedeuxcents.png");

  billetDeCinqCent = new Argent();
  billetDeCinqCent.montant = 500;
  billetDeCinqCent.posX = billetDeCinq.posX = PApplet.parseInt(random(10,1850));
  billetDeCinqCent.posY = 0;
  billetDeCinqCent.vitesse = 2;
  billetDeCinqCent.photo = loadImage("billetdecinqcents.png");
}
public void draw(){
  if (ecran == 0){
    fenetre.afficherMenu(); //Menu
    sonHistoire.play();
    sonJeu.pause();
    sonShop.pause();
    //fenetre.modeDev(); //Fenetre avec les informations du jeu (utile pour régler les bugs)
  }
  if (ecran == 1){
    fenetre.afficherJeu(); //Pendant le jeu
    sonJeu.play();
    sonHistoire.pause();
    sonShop.pause();
    //fenetre.modeDev();
      }
  if (ecran == 2){
    fenetre.afficherHistoire(); //Introduction
    sonHistoire.play();
    sonShop.pause();
    //fenetre.modeDev();
  }
  if (ecran == 3){
    fenetre.shop(); //La boutique
    sonShop.play(); //Lance la musique de la boutique
    sonHistoire.pause();  //Coupe la musique du menu/histoire
    //fenetre.modeDev();
  }
  if (ecran == 4){
    fenetre.finDeJeu(); //Aeroport
    sonHistoire.pause();  //Coupe la musique du menu/histoire
  }
  if (ecran == 5){
    fenetre.credits();  //Les credits de fin
    sonHistoire.pause();  //Coupe la musique du menu/histoire
    sonShop.pause();  
    sonFin.play();
  }
  if (ecran == 6){
    fenetre.afficherCommentJouer(); //Fenêtre comment jouer
  }
} 
public void keyPressed() {
  if (keyCode == RIGHT) {
     gars.droite(); //Le personnage avance vers la droite
     droite = true; //Pour la position des coeurs en dessous du personnage
     gauche = false;
  }
  if (keyCode == LEFT) {
     gars.gauche();  //Le personnage avance vers la gauche
     gauche = true;  //Pour la position des coeurs en dessous du personnage
     droite = false;
  }
 }
public void mouseClicked() {
  if ((mouseX > width/2-150) && (mouseX < width/2+150) && (mouseY > 270) && (mouseY < 370) && (ecran == 0) ) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 1; //Le gameplay
  }
  else if ((mouseX > width/2-400) && (mouseX < width/2+400) && (mouseY > 420) && (mouseY < 520) && (ecran == 0) ) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 6; //L'histoire
  }
  else if ((mouseX > width/2-200)&&(mouseX < width/2+400)&&(mouseY > height/4+300)&&(mouseY < height/4+400)&&(ecran == 0)) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 3; //La boutique
  }
  else if ((mouseX > width/2-200) && (mouseX < width/2+200) && (mouseY > height/2+200) && (mouseY < height/2+320) && (ecran == 1) && (billetDeDix.finDeJeu == 1)) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 0; //Menu
    fenetre.recommencer(); //Pour remettre certaines variable à leur valeur initial (ex la vitesse des billets)
  }
  else if ((fenetre.dialogue == 0) && (ecran == 2)) {
    bruitBouton.trigger();  //Bruit du bouton
    fenetre.dialogue = 1; //Pour le second texte lors de l'intro
  }
  else if ((fenetre.dialogue == 1) && (ecran == 2)) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 0; //Menu
  }
  else if ((mouseX > width/2-200) && (mouseX < width/2+200) && (mouseY > 925) && (mouseY < 1045) && (ecran == 3)) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 0; //Menu 
  }
  else if ((mouseX > width/2-200) && (mouseX < width/2+200) && (mouseY > 925) && (mouseY < 1045) && (ecran == 6)) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 0; //Menu 
  }
  else if ((mouseX > width/2-100) && (mouseX < width/2+100) && (mouseY > 700) && (mouseY < 750) && (ecran == 3) &&(boutique.coutBillet<billetDeDix.money) && (boutique.ameliorationBillet <3)){
    bruitAchat.trigger(); //Bruit du bouton
    boutique.ameliorationBillet = boutique.ameliorationBillet + 1; //Pour acheter une amélioration d'un billet dans la Boutique
    billetDeDix.money = billetDeDix.money - boutique.coutBillet;
  }
  else if ((mouseX > width/4-100) && (mouseX < width/4 +100) && (mouseY > 700) && (mouseY < 750) && (ecran == 3) &&(boutique.coutVie<billetDeDix.money) && (boutique.ameliorationVie < 2)){
    bruitAchat.trigger(); //Bruit du bouton
    boutique.ameliorationVie = boutique.ameliorationVie + 1; //Pour acheter une amélioration de vie dans la Boutique
    billetDeDix.money = billetDeDix.money - boutique.coutVie;
  }
  else if ((mouseX > width/4+width/2-100) && (mouseX < width/2 + width/4 +100) && (mouseY > 700) && (mouseY < 750) && (ecran == 3)&&(boutique.coutVitesse<billetDeDix.money) &&(boutique.ameliorationVitesse < 10)){
    bruitAchat.trigger(); //Bruit du bouton
    boutique.ameliorationVitesse = boutique.ameliorationVitesse + 1;  //Pour acheter une amélioration de Vitesse dans la Boutique
    billetDeDix.money = billetDeDix.money - boutique.coutVitesse;
  }
  else if ((mouseX > 1400) && (mouseX < 1850) && (mouseY > 900) && (mouseY < 1050) && (ecran == 3)){
    bruitBouton.trigger(); //Bruit du bouton
    ecran = 4;
  }
  else if ((mouseX > width/2-100) && (mouseX < width/2+100) && (mouseY > height/2+150) && (mouseY < height/2+250) && (boutique.coutTicket<=billetDeDix.money) && (ecran == 4)){
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 5;
  }
  else if ((ecran == 4) && (mouseX > width/2-135) && (mouseX < width/2+335) && (mouseY > 805) && (mouseY < 925)) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 0; //Menu 
  }
  else if ((ecran == 4) && (mouseX > 100) && (mouseX < 550) && (mouseY > 900) && (mouseY < 1050)) {
    bruitBouton.trigger();  //Bruit du bouton
    ecran = 3; //Menu 
  }
  else if (ecran == 5) {
    exit();
  }
}
 class Argent {
  int montant; //Paramètre du montant du billet
  float posX;  //Position X du billet
  float posY;  //Position Y du billet
  float vitesse;  //Vitesse du billet
  PImage photo;  //Paramètre pour l'image du billet
  float randomBillet = PApplet.parseInt(random(1,4));  //Valeur qui permet de savoir quel billet va apparaitre
  int vie = 3;  //Nombre de vie
  boolean recupBillet = true;  //boolean pour savoir si le joueur à récupérer le billet
  int finDeJeu = 0;  //S'il est à 1 alors Jeu terminé
  int money = 0;  //Nombre d'argent
  int moneyObtenu; //Nombre d'argent obtenue en fin de Partie
  int posXTextMoney;  //Position X du texte qui affiche le montant de notre portefeuille
  public void chute(){ //void pour la chute des billets
    if (randomBillet == 3) {
      billetDeDix.posY = billetDeDix.posY + billetDeDix.vitesse; //Le billet de Dix qui tombe lorsque "randomBillet" est égal à 3
    }
    if (randomBillet == 2) {
      billetDeVingt.posY = billetDeVingt.posY + billetDeVingt.vitesse;  //Le billet de Vingt qui tombe lorsque "randomBillet" est égal à 2
    }
    if (randomBillet == 1) {
      billetDeCinq.posY = billetDeCinq.posY + billetDeCinq.vitesse;  //Le billet de Cinq qui tombe lorsque "randomBillet" est égal à 1
    }
    if (billetDeCinq.posY > 1000 || billetDeDix.posY > 1000 || billetDeVingt.posY > 1000) { //Si le billet n'est pas ramasser
      randomBillet = PApplet.parseInt(random(1,4)); //Choisir quel billet va appaitre
      recupBillet = false; //Pour faire perdre une vie
      if (randomBillet == 3){
        billetDeDix.posX = PApplet.parseInt(random(10,1900)); //Choisir une nouvelle position X pour le billet Choisis par le randomBillet
        billetDeVingt.posX = -1000;  //Les autres billets non concernées hors de l'écran
        billetDeCinq.posX = -1000;
      }
      if (randomBillet ==2){
        billetDeDix.posX = -1000;
        billetDeVingt.posX = PApplet.parseInt(random(10,1900));
        billetDeCinq.posX = -1000;
      }
      if (randomBillet == 1){
        billetDeDix.posX = -1000;
        billetDeVingt.posX = -1000;
        billetDeCinq.posX = PApplet.parseInt(random(10,1900));
      }
      billetDeDix.posY = 0; //position Y pour tous les billets
      billetDeVingt.posY = 0;
      billetDeCinq.posY = 0;}
    }

  public void nouveauBillet(){
    if (randomBillet == 3) {
      image(billetDeDix.photo,billetDeDix.posX,billetDeDix.posY); //Met l'image du billet concerné via le randomBillet
    }
    if (randomBillet == 2) {
      image(billetDeVingt.photo,billetDeVingt.posX,billetDeVingt.posY);  //Met l'image du billet concerné via le randomBillet
    }
    if (randomBillet == 1) {
      image(billetDeCinq.photo,billetDeCinq.posX,billetDeCinq.posY);  //Met l'image du billet concerné via le randomBillet
    } 
    if (amelioration.randomBilletDeux == 1) {
      image(billetDeCinquante.photo,billetDeCinquante.posX,billetDeCinquante.posY);  //Met l'image du billet concerné via le randomBilletDeux
    }
    if (amelioration.randomBilletDeux == 2){
      image(billetDeCent.photo, billetDeCent.posX, billetDeCent.posY);  //Met l'image du billet concerné via le randomBilletDeux
    }
    if (amelioration.randomBilletDeux == 3){
      image(billetDeDeuxCent.photo, billetDeDeuxCent.posX, billetDeDeuxCent.posY);  //Met l'image du billet concerné via le randomBilletDeux
    }
    if (amelioration.randomBilletDeux == 4){
      image(billetDeCinqCent.photo, billetDeCinqCent.posX, billetDeCinqCent.posY);  //Met l'image du billet concerné via le randomBilletDeux
    }
  }
  public void recolteLaThune(){
    if (billetDeCinq.posY > 800 || billetDeDix.posY > 800 || billetDeVingt.posY > 800){ //A partir de la valeur 800 (position Y) le joueur peut récupérer le billet
      if (randomBillet == 1){
        if (billetDeCinq.posX < gars.posx+100) {
          if (billetDeCinq.posX > gars.posx - 100){ //Hitbox pour récupérer le billet
            randomBillet = PApplet.parseInt(random(1,4)); //S'il le récupère alors choisir un nouveau billet via le Random
            if (randomBillet == 1){ 
              billetDeCinq.posX = PApplet.parseInt(random(10,1900)); //Le billet choisis prends une nouvelle position X aléatoire
            }
            if (randomBillet == 2){
              billetDeVingt.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBillet == 3){
              billetDeDix.posX = PApplet.parseInt(random(10,1900));
            }
            billetDeCinq.posY = 0; //Mettre la position Y à sa valeure initial
            recupBillet = true; //Le billet a bien été récupérer donc "true"
            money = money + billetDeCinq.montant;  //Ajout la valeur du billet dans le portefeuille
            moneyObtenu = moneyObtenu + billetDeCinq.montant; //Ajout la valeur du billet dans les stats fin de partie
            billetDeCinq.vitesse = billetDeCinq.vitesse + 1; //Accélération du billet pour plus de difficulté
            nouveauBillet(); //Pour une nouvelle Image du billet
          }
        } //PAREIL POUR LES AUTRES BILLETS
      }
      if (randomBillet == 2){
        if (billetDeVingt.posX < gars.posx+100) {
          if (billetDeVingt.posX > gars.posx - 100){
            randomBillet = PApplet.parseInt(random(1,4));
            if (randomBillet == 1){
              billetDeCinq.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBillet == 2){
              billetDeVingt.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBillet == 3){
              billetDeDix.posX = PApplet.parseInt(random(10,1900));
            }
            billetDeVingt.posY = 0;
            recupBillet = true;
            money = money + billetDeVingt.montant;
            moneyObtenu = moneyObtenu + billetDeVingt.montant; //Ajout la valeur du billet dans les stats fin de partie
            billetDeVingt.vitesse = billetDeVingt.vitesse + 1;
            nouveauBillet();
          }
        }
      }
      
      if (randomBillet == 3){
        if (billetDeDix.posX < gars.posx+100) {
          if (billetDeDix.posX > gars.posx - 100){
            randomBillet = PApplet.parseInt(random(1,4));
            if (randomBillet == 1){
              billetDeCinq.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBillet == 2){
              billetDeVingt.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBillet == 3){
              billetDeDix.posX = PApplet.parseInt(random(10,1900));
            }
            billetDeDix.posY = 0;
            recupBillet = true;
            money = money + billetDeDix.montant;
            moneyObtenu = moneyObtenu + billetDeDix.montant; //Ajout la valeur du billet dans les stats fin de partie
            billetDeDix.vitesse = billetDeDix.vitesse +1;
            nouveauBillet();
          }
        }
      }
    }
  }
  public void vie(){
    if (!recupBillet){
      vie = vie -1; 
      recupBillet = true; //Remettre à true pour pas qu'il perde 60 vie par seconde
    }
    if (vie == 0){
     finDeJeu = 1; //Si vie = 0 alors GAME OVER
    }
  }
  public void afficherVie(){
    if (vie == 5){
      if (gauche){ //Il y a un décalage entre la gauche et la droite
        image(coeur,gars.posx-80,1000); //Pour afficher les images en dessous du personnage
        image(coeur,gars.posx-20,1000);
        image(coeur,gars.posx+40,1000);
        image(coeur,gars.posx+100,1000);
        image(coeur,gars.posx+160,1000);
      }
      if (droite){ 
        image(coeur,gars.posx-105,1000);
        image(coeur,gars.posx-45,1000);
        image(coeur,gars.posx+15,1000);
        image(coeur,gars.posx+75,1000);
        image(coeur,gars.posx+135,1000);
      }
    }
    if (vie == 4){
      if (gauche){
        image(coeur,gars.posx-50,1000);
        image(coeur,gars.posx+10,1000);
        image(coeur,gars.posx+70,1000);
        image(coeur,gars.posx+130,1000);
      }
      if (droite){
        image(coeur,gars.posx-75,1000);
        image(coeur,gars.posx-15,1000);
        image(coeur,gars.posx+45,1000);
        image(coeur,gars.posx+105,1000);
      }
    }
    if (vie == 3){
      if (gauche){
        image(coeur,gars.posx-20,1000);
        image(coeur,gars.posx+40,1000);
        image(coeur,gars.posx+100,1000);
      }
      if (droite){
        image(coeur,gars.posx-45,1000);
        image(coeur,gars.posx+15,1000);
        image(coeur,gars.posx+75,1000);
      }
    }
    if (vie == 2){
      if (gauche){
        image(coeur,gars.posx+10,1000);
        image(coeur,gars.posx+70,1000);
      }
      if (droite){
        image(coeur,gars.posx-15,1000);
        image(coeur,gars.posx+45,1000);
      }
    }
    if (vie == 1){
      if (gauche){
        image(coeur,gars.posx+40,1000);
      }
      if (droite){
        image(coeur,gars.posx+15,1000);
      }
    }
  }
  public void afficherArgent(){
    noStroke();
    fill(0,0,0,200);
    rect(50,50,250,50,25); //Rectangle noir avec de l'opacité 
    fill(255);
    textSize(30);
    if (money < 10){
      posXTextMoney = 270;  //Pour définir la position X du texte du billet pour pas que ce soit décaler
    }                       //S'il y aurait pas cette fonction alors ça ferait ça : |  0| |  1|0 au lieu de ça: |  0| | 10|
    //Le texte serait en dehors du cadre
    if ((money >= 10)&& (money < 100)){
      posXTextMoney = 255;
    }
    if ((money >= 100)&& (money < 1000)){
      posXTextMoney = 240;
    }
    if ((money >= 1000)&& (money < 10000)){
      posXTextMoney = 225;
    }
    if ((money >= 10000)&& (money < 100000)){
      posXTextMoney = 210;
    }
    text(money,posXTextMoney,85);  //Texte du montant du portefeuille
    image(moula,-25,40); //Image du logo pour le portefeuille
  }
}
class ArgentDeux{
    float randomBilletDeux=1; //Je le met à 1 pour faire apparaitre le billet de 50 initialement

//MEME PRINCIPE QUE POUR LA CLASSE ARGENT
public void recolteDeux(){
if (billetDeCinquante.posY > 800 || billetDeCent.posY > 800 || billetDeDeuxCent.posY > 800 || billetDeCinqCent.posY > 800){
      if (randomBilletDeux == 1){
        if (billetDeCinquante.posX < gars.posx + 100){
          if (billetDeCinquante.posX > gars.posx - 100){
            if (boutique.ameliorationBilletNivUn){ //Si le joueur à améliorer son bonus au niveau 1 alors
              randomBilletDeux = PApplet.parseInt(random(1,3)); //Un choix entre 2 billets
            }
            if (boutique.ameliorationBilletNivDeux){   //Si le joueur à améliorer son bonus au niveau 2 alors
              randomBilletDeux = PApplet.parseInt(random(1,4));  //Un choix entre 3 billets
            }
            if (boutique.ameliorationBilletNivTrois){  //Si le joueur à améliorer son bonus au niveau 3 alors
              randomBilletDeux = PApplet.parseInt(random(1,5));  //Un choix entre 4 billets
            }
            if (randomBilletDeux == 1){
              billetDeCinquante.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 2){
              billetDeCinquante.posX = -1000;  
              billetDeCent.posX = PApplet.parseInt(random(10,1900)); 
            }
            if (randomBilletDeux == 3){
              billetDeCinquante.posX = -1000;
              billetDeDeuxCent.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 4){
              billetDeCinquante.posX = -1000;
              billetDeCinqCent.posX = PApplet.parseInt(random(10,1900));
            }
            billetDeCinquante.posY = 0;
            billetDeDix.recupBillet = true;
            billetDeDix.money = billetDeDix.money + billetDeCinquante.montant;
            billetDeDix.moneyObtenu = billetDeDix.moneyObtenu + billetDeCinquante.montant; //Ajout la valeur du billet dans les stats fin de partie
            billetDeDix.nouveauBillet();
          }
        }
      } //MEME PARAMETRE POUR LE RESTE DE LA PAGE
      if (randomBilletDeux == 2){
        if (billetDeCent.posX < gars.posx + 100){
          if (billetDeCent.posX > gars.posx - 100){
            if (boutique.ameliorationBilletNivUn){
              randomBilletDeux = PApplet.parseInt(random(1,3));
            }
            if (boutique.ameliorationBilletNivDeux){
              randomBilletDeux = PApplet.parseInt(random(1,4));
            }
            if (boutique.ameliorationBilletNivTrois){
              randomBilletDeux = PApplet.parseInt(random(1,5));
            }

            if (randomBilletDeux == 1){
              billetDeCent.posX = -1000;
              billetDeCinquante.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 2){
              billetDeCent.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 3){
              billetDeCent.posX = -1000;
              billetDeDeuxCent.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 4){
              billetDeCent.posX = -1000;
              billetDeCinqCent.posX = PApplet.parseInt(random(10,1900));
            }
            billetDeCent.posY = 0;
            billetDeDix.recupBillet = true;
            billetDeDix.money = billetDeDix.money + billetDeCent.montant;
            billetDeDix.moneyObtenu = billetDeDix.moneyObtenu + billetDeCent.montant; //Ajout la valeur du billet dans les stats fin de partie
            billetDeDix.nouveauBillet();
          }
        }
      }
      if (randomBilletDeux == 3){
        if (billetDeDeuxCent.posX < gars.posx + 100){
          if (billetDeDeuxCent.posX > gars.posx - 100){
            if (boutique.ameliorationBilletNivUn){
              randomBilletDeux = PApplet.parseInt(random(1,3));
            }
            if (boutique.ameliorationBilletNivDeux){
              randomBilletDeux = PApplet.parseInt(random(1,4));
            }
            if (boutique.ameliorationBilletNivTrois){
              randomBilletDeux = PApplet.parseInt(random(1,5));
            }

            if (randomBilletDeux == 1){
              billetDeDeuxCent.posX = -1000;
              billetDeCinquante.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 2){
              billetDeDeuxCent.posX = -1000;
              billetDeCent.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 3){
              billetDeDeuxCent.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 4){
              billetDeDeuxCent.posX = -1000;
              billetDeCinqCent.posX = PApplet.parseInt(random(10,1900));
            }
            billetDeDeuxCent.posY = 0;
            billetDeDix.recupBillet = true;
            billetDeDix.money = billetDeDix.money + billetDeDeuxCent.montant;
            billetDeDix.moneyObtenu = billetDeDix.moneyObtenu + billetDeDeuxCent.montant; //Ajout la valeur du billet dans les stats fin de partie
            billetDeDix.nouveauBillet();
          }
        }
      }
      if (randomBilletDeux == 4){
        if (billetDeCinqCent.posX < gars.posx + 100){
          if (billetDeCinqCent.posX > gars.posx - 100){
            if (boutique.ameliorationBilletNivUn){
              randomBilletDeux = PApplet.parseInt(random(1,3));
            }
            if (boutique.ameliorationBilletNivDeux){
              randomBilletDeux = PApplet.parseInt(random(1,4));
            }
            if (boutique.ameliorationBilletNivTrois){
              randomBilletDeux = PApplet.parseInt(random(1,5));
            }

            if (randomBilletDeux == 1){
              billetDeCinqCent.posX = -1000;
              billetDeCinquante.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 2){
              billetDeCinqCent.posX = -1000;
              billetDeCent.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 3){
              billetDeCinqCent.posX = -1000;
              billetDeDeuxCent.posX = PApplet.parseInt(random(10,1900));
            }
            if (randomBilletDeux == 4){
              billetDeCinqCent.posX = PApplet.parseInt(random(10,1900));
            }
            billetDeCinqCent.posY = 0;
            billetDeDix.recupBillet = true;
            billetDeDix.money = billetDeDix.money + billetDeCinqCent.montant;
            billetDeDix.moneyObtenu = billetDeDix.moneyObtenu + billetDeCinqCent.montant; //Ajout la valeur du billet dans les stats fin de partie
            billetDeDix.nouveauBillet();
          }
        }
      }
    }
  }
  public void chutedeux(){
      if (randomBilletDeux == 1){
        billetDeCinquante.posY = billetDeCinquante.posY + billetDeCinquante.vitesse;
      }
      if (randomBilletDeux == 2){
        billetDeCent.posY = billetDeCent.posY + billetDeCent.vitesse;
      }
      if (randomBilletDeux == 3){
        billetDeDeuxCent.posY = billetDeDeuxCent.posY + billetDeDeuxCent.vitesse;
      }
      if (randomBilletDeux == 4){
        billetDeCinqCent.posY = billetDeCinqCent.posY + billetDeCinqCent.vitesse;
      }
      
    if (billetDeCinquante.posY > 1000 || billetDeCent.posY > 1000 || billetDeDeuxCent.posY > 1000 || billetDeCinqCent.posY > 1000){
      if (boutique.ameliorationBilletNivUn){
        randomBilletDeux = PApplet.parseInt(random(1,3));
      }
      if (boutique.ameliorationBilletNivDeux){
        randomBilletDeux = PApplet.parseInt(random(1,4));
      }
      if (boutique.ameliorationBilletNivTrois){
        randomBilletDeux = PApplet.parseInt(random(1,5));
      }
      if (randomBilletDeux == 1){
        billetDeCinquante.posX = PApplet.parseInt(random(10,1900));
        billetDeCent.posX = -1000;
        billetDeDeuxCent.posX = -1000;
        billetDeCinqCent.posX = -1000;
      }
      if (randomBilletDeux == 2){
        billetDeCinquante.posX = -1000;
        billetDeCent.posX = PApplet.parseInt(random(10,1900));
        billetDeDeuxCent.posX = -1000;
        billetDeCinqCent.posX = -1000;
      }
      if (randomBilletDeux == 3){
        billetDeCinquante.posX = -1000;
        billetDeCent.posX = -1000;
        billetDeDeuxCent.posX = PApplet.parseInt(random(10,1900));
        billetDeCinqCent.posX = -1000;
      }
      if (randomBilletDeux == 4){
        billetDeCinquante.posX = -1000;
        billetDeCent.posX = -1000;
        billetDeDeuxCent.posX = -1000;
        billetDeCinqCent.posX = PApplet.parseInt(random(10,1900));
      }
      billetDeCinquante.posY = 0;
      billetDeCent.posY = 0;
      billetDeDeuxCent.posY = 0;
      billetDeCinqCent.posY = 0;
    }
  }
}
class Ecran {
  int dialogue = 0;
public void afficherMenu(){  //Pour tous les interfaces graphiques du menu
  background(backgroundHistoire);
  fill(255);
  image(bulleTrois,width/2-150,height/4-10);
  fill(0);
  textFont(fontPixel);
  textSize(100);
  text("Jouez",(width/2)-125,350);
  fill(255);
  image(bulleHuit,width/2-400,height/4+140);
  fill(0);
  textFont(fontPixel);
  textSize(100);
  text("Comment jouer ?",(width/2)-375,500);
  fill(255);
  image(bulleFour,width/2-200,height/4+290);
  fill(0);
  text("Boutique",width/2-190,height/4+380);
  billetDeDix.afficherArgent();
}
public void afficherJeu(){  //Pour tous les interfaces graphiques du menu
  background(background); //Image du background du jeu
  if (billetDeDix.finDeJeu == 0){
    billetDeDix.chute();
    billetDeDix.nouveauBillet();
    billetDeDix.recolteLaThune();
    billetDeDix.vie(); 
    billetDeDix.afficherVie();
    billetDeDix.afficherArgent();
    amelioration.recolteDeux();
    amelioration.chutedeux();
    gars.afficherImage();
  }
  if (billetDeDix.finDeJeu == 1){  //Interface du GAME OVER
    image(bulleGameOver,width/2-375,height/2-550);
    image(gameOver,width/2-229,height/2-400);
    textSize(50);
    fill(255);
    text("Argent obtenu: "+ billetDeDix.moneyObtenu,width/2-190,height/2);
    textSize(100);
    image(bulleFour,width/2-200,height/2+200);
    fill(0);
    text("MENU",width/2-135,height/2+295);
  }
}
public void afficherHistoire(){  //Interface de l'histoire
  background(backgroundHistoire);
  if (dialogue == 0){
    textFont(fontPixel);
    image(chat,0,height-300);
    textSize(50);
    text("Ce quartier est rempli de Yakuzas, je ne veux plus vivre ici.",75,900);
    text("Il faut vraiment que je m'en aille de cette ville !",75,950);
  }
  else if (dialogue == 1){
    textFont(fontPixel);
    image(chat,0,height-300);
    textSize(50);
    text("J'ai vu qu'un billet d'avion coûtait que 10 000 Yen.",75,900);
    text("Je pourrais m'en procurer un pour me casser de ce",75,950);
    text("quartier et de cette ville !",75,1000);
  }

}
public void modeDev(){  //Interface du mode Dev pour avoir toutes les informations à l'instant T
    textSize(20);
    fill(255);
    rect(10,10,200,550);
    fill(0);
    text("niveau vitesse"+ boutique.ameliorationVitesse,15,190);
    text("Niveau Vie"+ boutique.ameliorationVie,15,220);
    text("Niveau Ame "+boutique.ameliorationBillet,15,250);
    text("posX Cinquante "+ billetDeCinquante.posX,15,280);
    text("posX Cent "+ billetDeCent.posX,15,310);
    text("posX DeuxCent "+ billetDeDeuxCent.posX,15,340);
    text("posX CinqCent "+ billetDeCinqCent.posX,15,370);
    text("posY Cinquante "+ billetDeCinquante.posY,15,400);
    text("posY Cent "+ billetDeCent.posY,15,430);
    text("posY DeuxCent "+ billetDeDeuxCent.posY,15,460);
    text("posY CinqCent "+ billetDeCinqCent.posY,15,490);
    text("Random "+ amelioration.randomBilletDeux,15,520);
  }
  public void recommencer(){  //Pour remettre toutes les variables à leur valeurs initials
    billetDeDix.finDeJeu=0;
    gars.posx = 1000;
    gars.posy = 800;
    billetDeCinq.vitesse = 4;
    billetDeDix.vitesse = 4;
    billetDeVingt.vitesse = 4;
    billetDeDix.vie = 3;
    billetDeDix.moneyObtenu = 0;
    if (boutique.ameliorationVie == 1){
      billetDeDix.vie = 4;
    }
    if (boutique.ameliorationVie == 2){
      billetDeDix.vie = 5;
    }
    billetDeCinquante.posY = 0;
    billetDeCent.posY = 0;
    billetDeDeuxCent.posY = 0;
    billetDeCinqCent.posY = 0;
    if (boutique.ameliorationBillet == 1){
      amelioration.randomBilletDeux=1;
    }
    if(boutique.ameliorationBillet == 2){
      amelioration.randomBilletDeux = PApplet.parseInt(random(1,3));
    }
    if(boutique.ameliorationBillet == 3){
      amelioration.randomBilletDeux = PApplet.parseInt(random(1,4));
    }
    if(boutique.ameliorationBillet == 4){
      amelioration.randomBilletDeux = PApplet.parseInt(random(1,5));
    }
  }
  public void shop(){  //Interface du Shop
    background(shop);
    textSize(100);
    fill(255);
    image(bulleFour,width/2-200,height/2+390);
    fill(0);
    text("MENU",width/2-135,1025);
    boutique.niveau();
    boutique.cout();
    boutique.interfaceBoutique();
    boutique.achatVie();
    billetDeDix.afficherArgent();
    image(bulleEcranQuatre,1400,900);
    fill(0);
    textSize(100);
    text("Aéroport",1425,1010);
  }
  public void finDeJeu(){
    background(backgroundAirPort);
    image(grandeVitrine,width/2-300,height/2-450);
    image(ticket,width/2-265,height/2-300);
    textFont(fontPixel);
    fill(0);
    textSize(75);
    text("Billet d'avion",width/2-215,height/2-325);
    textSize(25);
    text("Description: En achetant ce billet,",width/2-200,height/2+20);
    text("vous pourrez quitter cette ville,",width/2-200,height/2+40);
    text("afin de trouver une vie meilleure !",width/2-200,height/2+60);
    image(bulleAcheter,width/2-100,height/2+150); //image de la bulle acheter 
    text("Coût du ticket:"+boutique.coutTicket,width/2-115,height/2+110); //Cout du ticket
    textSize(50);
    text("Acheter",width/2-85,750);
    image(bulleFour,width/2-200,height/2+290);
    fill(0);
    textSize(100);
    text("MENU",width/2-135,925);
    image(bulleEcranQuatre,100,900);
    fill(0);
    textSize(100);
    text("Retour",175,1010);
    billetDeDix.afficherArgent();
  }
  public void credits(){
    background(0);
    fill(255);
    textSize(100);
    text("C'était Life Away",width/2-370,height/2-150);
    textSize(50);
    text("Tous les sons et images (sauf les images d'arrières plans) sont libres de droits !",width/2-900,height/2);
    textSize(100);
    text("Merci d'avoir jouer à Life Away !",width/2-700,height/2+200);
    textSize(10);
    text("https://opengameart.org/ Pour tous les sons et images utilisés hormis les images de fond",5,height);
  }
  public void afficherCommentJouer(){
    background(backgroundHistoire);
    textSize(95);
    fill(0);
    image(livre,width/2-500,height/2-350);
    image(bulleHistoire,width/2-395,height/4-180);
    text("Comment Jouer ?",width/2-375,height/4-100);
    image(bulleFour,width/2-200,height/2+390);
    textSize(100);
    text("MENU",width/2-135,1025);
  }
}
class Heros {
  PImage imageDroite;
  PImage imageGauche;
  PImage imageDefault;
  int posx = 1000;
  int posy = 800;
  Heros(){
    imageGauche = loadImage("guyleft.png"); //Déclaration des images pour le personnage
    imageDroite = loadImage("guyright.png");
    imageDefault = loadImage("guyright.png");
  }
  public void afficherImage(){  
    image(imageDefault,posx,posy);  //Affiche l'image de base (celle de droite)
    if (posx >= 1850){ //Si le personnage traverse l'écran alors le faire réaparaitre à l'autre bout
      posx = 1;
    }
    if (posx <= 0){
      posx = 1800;}
  }
  public void droite(){
    posx = posx + 25 + boutique.ameliorationVitesse; //Bouge le position X du personnage de +25 avec le bonus s'il y en a un
    imageDefault = imageDroite;
  }
  public void gauche(){
    posx = posx - 25 - boutique.ameliorationVitesse; //Bouge le position X du personnage de -25 avec le bonus s'il y en a un
    imageDefault = imageGauche;
  }
}
class Shop{
    boolean ameliorationBilletNivZero = true; //Boolean qui servent dans la classe ArgentDeux
    boolean ameliorationBilletNivUn = false;
    boolean ameliorationBilletNivDeux = false;
    boolean ameliorationBilletNivTrois = false;
    int ameliorationBillet = 0; //Le niveau des améliorations
    int ameliorationVie = 0;
    int ameliorationVitesse = 0;
    int coutBillet; //Le cout des améliorations
    int coutVie;
    int coutVitesse;
    int coutTicket = 10000;

    public void niveau(){ //Petite traduction de INT jusqu'à boolean
        if (ameliorationBillet == 1){
            ameliorationBilletNivUn = true;
        }
        if (ameliorationBillet == 2){
            ameliorationBilletNivUn = false;
            ameliorationBilletNivDeux = true;
        }
        if (ameliorationBillet == 3){
            ameliorationBilletNivDeux = false;
            ameliorationBilletNivTrois =true;
        }
    }
    public void interfaceBoutique(){
        if (ameliorationBillet < 3){
            fill(255);
            image(vitrine,width/2-200,height/2-300); //Image du spray du fond
            if (ameliorationBillet == 0){  //Afficher le billet de 100
                image(boutiqueCent,width/2-135,height/2-250); //Image du billet 100
                textSize(20);
                fill(0);
                text("Description: En achetant cette",width/2-135,height/2+10);
                text("amélioration. Des billets de",width/2-135,height/2+30);
                text("cents apparaiteront !",width/2-135,height/2+50);
            }
            if (ameliorationBillet == 1){  //Afficher le billet de 200
                image(boutiqueDeuxCent,width/2-135,height/2-250); //Image du billet de 200
                textSize(20);
                fill(0);
                text("Description: En achetant cette",width/2-135,height/2+10);
                text("amélioration. Des billets de",width/2-135,height/2+30);
                text("deux cents apparaiteront !",width/2-135,height/2+50);
            }
            if (ameliorationBillet == 2){ //afficher le billet de 500
                image(boutiqueCinqCent,width/2-135,height/2-250); //Image du billet de 500
                textSize(20);
                fill(0);
                text("Description: En achetant cette",width/2-135,height/2+10);
                text("amélioration. Des billets de",width/2-135,height/2+30);
                text("cinq cents apparaiteront !",width/2-135,height/2+50);
            }
            fill(0);
            textSize(30);
            text("Niveau Actuel :"+ameliorationBillet,width/2-135,height/2-25);  //affiche le niveau actuel de l'amélioration billet
            text("Coût suivant:"+coutBillet,width/2-135,height/2+90); //affiche le cout pour le niveau sivant
            image(bulleAcheter,width/2-100,height/2+150); //image de la bulle acheter 
            textSize(50);
            text("Acheter",width/2-85,750);
        }
        if (ameliorationBillet == 3){ //NIVEAU MAX ATTEINT
            fill(0);
            textSize(20);
            image(vitrine,width/2-200,height/2-300); //Image de la bulle derrière 
            image(ameliorationBilletMax,width/2-135,height/2-250); //Image du billet en gris
            text("Vous venez d'acheter toutes",width/2-135,height/2+10);   
            text("les améliorations possibles !",width/2-135,height/2+30);
            textSize(30);
            text("Niveau Actuel : MAX",width/2-135,height/2-25);  //Affiche niveau MAX
        }
        if (ameliorationVie < 2){
            fill(255);
            image(vitrine,width/4-200,height/2-300);
            image(bulleAcheter,width/4-100,height/2+150);
            image(ameliorationHeart,width/4-85,height/2-250); //Image de l'amélioration Vie
            fill(0);
            textSize(30);
            text("Niveau Actuel :"+ameliorationVie,width/4-115,height/2-25); //Niveau actuel
            text("Coût suivant:"+coutVie,width/4-115,height/2+90);  //Cout du prochain niveau
            textSize(20);
            text("Description : Ajoutez vous une",width/4-115,height/2+10); //Description
            text("vie afin que la partie sois plus",width/4-115,height/2+30);
            text("longue !",width/4-115,height/2+50);
            textSize(50);
            text("Acheter",width/4-85,750);
        }
        if (ameliorationVie == 2){ //NIVEAU MAX ATTEINT
            image(vitrine,width/4-200,height/2-300);
            fill(0);
            textSize(20);
            image(ameliorationHeartMax,width/4-85,height/2-250); //Image de la vie en gris
            text("Vous venez d'acheter toutes",width/4-115,height/2+10);
            text("les améliorations possibles !",width/4-115,height/2+30);
            textSize(30);
            text("Niveau Actuel : MAX",width/4-115,height/2-25);
        }
        if (ameliorationVitesse < 10){
            fill(255);
            image(vitrine,width/4+width/2-200, height/2-300);
            image(bulleAcheter,width/4+width/2-100,height/2+150);
            image(ameliorationSpeed,width/4+width/2-200,height/2-250);
            fill(0);
            textSize(30);
            text("Niveau Actuel :"+ameliorationVitesse,width/4+width/2-115,height/2-25);  //Niveau actuel
            text("Coût suivant:"+coutVitesse,width/4+width/2-115,height/2+90); //Cout du prochain niveau
            textSize(20);
            text("Description : Améliorez votre",width/4+width/2-115,height/2+10); //Description
            text("vitesse afin de récupérer les",width/4+width/2-115,height/2+30);
            text("billets plus rapidement !",width/4+width/2-115,height/2+50);
            textSize(50);
            text("Acheter",width/4+width/2-85,750);
        }
        if (ameliorationVitesse == 10){
            image(vitrine,width/4+width/2-200, height/2-300);
            fill(0);
            textSize(30);
            image(ameliorationSpeedMax,width/4+width/2-200,height/2-250); //Image de la vitesse en gris
            text("Niveau Actuel : MAX",width/4+width/2-115,height/2-25);
            textSize(20);
            text("Vous venez d'acheter toutes",width/4+width/2-115,height/2+10);
            text("les améliorations possibles !",width/4+width/2-115,height/2+30);
        }
    }
    public void achatVie(){
        if (ameliorationVie == 1){
            billetDeDix.vie =  4;
        }
        if (ameliorationVie == 2){
            billetDeDix.vie = 5;
        }
    }
    public void cout(){ //Pour définir la valeur du cout du prochain niveau selon le niveau actuel
        if (ameliorationBillet == 0){
            coutBillet = 500;
        }
        if (ameliorationBillet == 1){
            coutBillet = 1000;
        }
        if (ameliorationBillet == 2){
            coutBillet = 1500;
        }
        if (ameliorationVie == 0){
            coutVie = 300;
        }
        if (ameliorationVie == 1){
            coutVie = 600;
        }
        if (ameliorationVitesse == 0){
            coutVitesse = 100;
        }
        if (ameliorationVitesse == 1){
            coutVitesse = 125;
        }
        if (ameliorationVitesse == 2){
            coutVitesse = 150;
        }
        if (ameliorationVitesse == 3){
            coutVitesse = 175;
        }
        if (ameliorationVitesse == 4){
            coutVitesse = 200;
        }
        if (ameliorationVitesse == 5){
            coutVitesse = 225;
        }
        if (ameliorationVitesse == 6){
            coutVitesse = 250;
        }
        if (ameliorationVitesse == 7){
            coutVitesse = 275;
        }
        if (ameliorationVitesse == 8){
            coutVitesse = 300;
        }
        if (ameliorationVitesse == 9){
            coutVitesse = 325;
        }
    }
}
  public void settings() {  fullScreen();  smooth(); }
  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "jeu" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}
