From 3c4fa77d64bc7480717b5b1481ec7dff7940c8db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A8ve=20Oriol?= Date: Sat, 29 May 2021 09:57:08 +0200 Subject: [PATCH] mofif du samedi 22/05/2021 : ajout classe Misile --- Misile.pde | 126 ++-- data/images/mechant_150x150 - Copie.png | Bin 0 -> 16816 bytes misille_guides.pde | 72 +++ space_inviders.pde | 788 ++++++++++++------------ 4 files changed, 534 insertions(+), 452 deletions(-) create mode 100644 data/images/mechant_150x150 - Copie.png create mode 100644 misille_guides.pde diff --git a/Misile.pde b/Misile.pde index 2f8c555..8c0e74f 100644 --- a/Misile.pde +++ b/Misile.pde @@ -1,63 +1,63 @@ -//code des Misiles des méchants -class Misile { - - boolean show = false; - PImage misile; - int y,x,yStart; - float time; - - Misile(int xt,int yt,String misilet,float timet) { - x = xt; - y = yStart = yt; - time = timet; - misile = loadImage(misilet); - } - - void apparaitre() { - image(misile, x, y); - } - - void verifiercollisions() { - - // Si un missile est en cours - if (show) { - - // Si le missile sort en bas de l'écran - if (y > hauteur) { - //on supprime le missile - show = false; - //on remet le y du missile pour le prochain - y = yStart; - } - - if ( dist(ship.x, ship.y, x, y) < 130 ) { - // Averti le vaiseau de la collision avec le missile - ship.collision = true; - sonCollision.play(); - - // supprime le missile - show = false; - } - - } - - } - - void tomber() { - y += 6; //ont peut changer cette variable(le nombre de la variable)pour changer la vitesse des missiles enemis. - } - - void affiche_et_mets_a_jour_le_missile() { - if (show) { - tomber(); - verifiercollisions(); - apparaitre(); - } else { - //Si pas de missile actif on peut en lancer un de temps en temps si le ship et toujours en vie: - // 0.1% du temps - if ( ship.pv != 0 && random(1000) < 1 ) show = true; - } - } - -} - +//code des Misiles des méchants +class Misile { + + boolean show = false; + PImage misile; + int y,x,yStart; + float time; + + Misile(int xt,int yt,String misilet,float timet) { + x = xt; + y = yStart = yt; + time = timet; + misile = loadImage(misilet); + } + + void apparaitre() { + image(misile, x, y); + } + + void verifiercollisions() { + + // Si un missile est en cours + if (show) { + + // Si le missile sort en bas de l'écran + if (y > hauteur) { + //on supprime le missile + show = false; + //on remet le y du missile pour le prochain + y = yStart; + } + + if ( dist(ship.x, ship.y, x, y) < 130 ) { + // Averti le vaiseau de la collision avec le missile + ship.collision = true; + sonCollision.play(); + + // supprime le missile + show = false; + } + + } + + } + + void tomber() { + y += 6; //ont peut changer cette variable(le nombre de la variable)pour changer la vitesse des missiles enemis. + } + + void affiche_et_mets_a_jour_le_missile() { + if (show) { + tomber(); + verifiercollisions(); + apparaitre(); + } else { + //Si pas de missile actif on peut en lancer un de temps en temps si le ship et toujours en vie: + // 0.1% du temps + if ( ship.pv != 0 && random(1000) < 1 ) show = true; + } + } + +} + diff --git a/data/images/mechant_150x150 - Copie.png b/data/images/mechant_150x150 - Copie.png new file mode 100644 index 0000000000000000000000000000000000000000..5bcae3d1055fb04182415b0f14ee5fbfdfc29436 GIT binary patch literal 16816 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 hauteur) { + //on supprime le missile + show = false; + //on remet le y du missile pour le prochain + y = yStart; + } + + if ( dist(ship.x, ship.y, x, y) < 130 ) { + // Averti le vaiseau de la collision avec le missile + ship.collision = true; + sonCollision.play(); + + // supprime le missile + show = false; + } + + } + + } + + //void tomber() { + // y += 6; //ont peut changer cette variable(le nombre de la variable)pour changer la vitesse des missiles enemis. + //} + + void affiche_et_mets_a_jour_le_missile_guides() { + if (show) { + // tomber(); + verifiercollisions(); + apparaitre(); + } else { + //Si pas de missile actif on peut en lancer un de temps en temps si le ship et toujours en vie: + // 0.1% du temps + if ( ship.pv != 0 && random(1000) < 1 ) show = true; + } + } + +} + diff --git a/space_inviders.pde b/space_inviders.pde index c1fcb76..d42dfc1 100644 --- a/space_inviders.pde +++ b/space_inviders.pde @@ -1,389 +1,399 @@ -// ajouter le son ? -boolean son = true; -boolean boss_start = false; - - - // ----------------------- \\ - - -// Importation librairies pour la gestion du sons -import processing.sound.*; -SoundFile sonLancemissile; -SoundFile sonExposion; -SoundFile sonCollision; -SoundFile sonLaser_boss; - -boolean test = false; -int largeur = 1600; -int hauteur = 900; -PImage space, img_ship, misile, imgGameover, imgWin, imgboss1, laserboss1; -String misileMechant1 = "data/images/misile - mechant.png"; -int x = largeur/2; -int y = hauteur-100; -int xm = x; -int ym = y; -int timerGameOver = 1500; // milliseconds d'attente avant affichage "Gameover" -int timer = 0; -int win; -float time; -boolean lancermisile = false; -String touchePresse = null; -//int nombreEnemiRestek = nombreEnemik; - -Ship ship; -Boss boss; - -boolean[] level = new boolean[3]; - -int nombreEnemi = 20; -int nombreEnemi_vague2 = 3; -int nombreEnemiReste = nombreEnemi; -Alien [] a = new Alien[nombreEnemi]; -Misile [] b = new Misile[nombreEnemi]; -Alien2 [] c = new Alien2[3]; - -//Etat de deplacement: 0 = aucun deplacement en cours -int moveXp = 0; // 1 si deplacement vers le bas -int moveXn = 0; // 1 si deplacement vers le haut -int moveYp = 0; // 1 si deplacement vers la droite -int moveYn = 0; // 1 si deplacement vers la gauche -int moveBoost = 1; - -boolean pause = false; - -void setup() { - - stroke(#000000); - strokeWeight(1); - textAlign(LEFT, TOP); - textSize(12); - size(1600, 900); - imageMode(CENTER); - - c[0] = new Alien2(800,350,5,"mechant_tres_mechant150x150.png"); - c[1] = new Alien2(1200,350,5,"mechant_tres_mechant150x150.png"); - c[2] = new Alien2(400,350,5,"mechant_tres_mechant150x150.png"); - - - //là, ça charge les images dans leurres varibles - space = loadImage("data/images/space.jpg"); - img_ship = loadImage("data/images/redfighter_200x200.png"); - misile = loadImage("data/images/misile.png"); - imgGameover = loadImage("data/images/gameover.png"); - imgWin = loadImage("data/images/Win_game.png"); - imgboss1 = loadImage("data/images/vaiseau_enemi.png"); - laserboss1 = loadImage("data/images/laser_boss1.png"); - - //création du boss - boss = new Boss(5, "vaiseau_enemi.png", 800, 171, 8); - //on crée le ship - ship = new Ship(x, y, 3, img_ship); - - //on crée des ennemis - for (int i = 0; i 9) { - j = i-10; - k =2; - } else { - j = i; - k =1; - } - a[i] = new Alien (100+(j*150), k*100, 1, "mechant_rouge_150x150.png"); - // a[i] = new Alien (100+(j*150), k*100, 3, "mechant_tres_mechant150x150.png"); - } - println("Affichage mechant"); - - - - //on crée des misiles - for (int i = 0; i 9) { - j = i-10; - k =2; - } else { - j = i; - k =1; - } - b[i] = new Misile (100+(j*150), k*100, misileMechant1, time); - } - - // Sons - if (son) { - sonLancemissile = new SoundFile(this, "data/sons/lancemissile.mp3"); - sonExposion = new SoundFile(this, "data/sons/SFB-explosion2.mp3"); - sonCollision = new SoundFile(this, "data/sons/collision avec le vaisseau.mp3"); - sonLaser_boss = new SoundFile(this, "data/sons/Laser_boss.mp3"); - } - - //Vitesse : frame par seconde - frameRate(60); - } - - void draw() { - - // if ( nombreEnemiReste == 0 && ship.pv > 0) { - // - // - // } - //debug: - //println(nombreEnemiReste); - - - miseAJourDuDeplacement(); - - //Affiche l'image de fond (l'espace) - background(space); - - // Si un missile du ship est en cours (actif) - if (lancermisile) { - //on le fait avencer - ym = ym - 20; - // Si le missile sort en haut de l'écran - if (ym < 0) { - ym = y; - xm = x; - lancermisile = false; - } - // Affiche l'image du missile - image(misile, xm, ym); - } else { - //Sinon (missile non actif) - //on le affiche en dessous du vaiseau si encore vivant - if (ship.show) { - ym = y; - xm = x; - } - } - - // Fait une boucle sur tout le tableau d'ennemies - for ( int i = 0; i timer ) { - image(imgGameover, largeur/2, hauteur/2); - println("GAME OVER"); - noLoop(); - - } - } - - //Affiche le "WIN" Du niveau 1 - if ( nombreEnemiReste == 0 && boss.pv == 0) { - //image(imgWin, largeur/2, hauteur/2); - } - - if (boss.pv <= 3){ - // met a jour les méchants très méchants - c[0].affiche_et_mets_a_jour_les_mechants(); - c[1].affiche_et_mets_a_jour_les_mechants(); - c[2].affiche_et_mets_a_jour_les_mechants(); - //nombreEnemiReste_vague2 =+ 3; - } - - //if ( nombreEnemiReste == 0 && boss_pv == 0) { - //on load la deuxièmme vague de vaisseau - //on crée des ennemis - // Fait une boucle sur tout le tableau d'ennemies - //for ( int i = 0; i 9) { - // j = i-10; - // k =2; - // } else { - // j = i; - // k =1; - // } - // a[i] = new Alien (100+(j*150), k*100, 3, mechant); - //} - - ////on crée des misiles - //for (int i = 0; i 9) { - // j = i-10; - // k =2; - // } else { - // j = i; - // k =1; - // } - // b[i] = new Misile (100+(j*150), k*100, misileMechant1, time); - //} - //} - - // // Fait une boucle sur tout le tableau d'ennemies - //for ( int i = 0; i height - 100 ) y = height - 100; - } - - if (moveXp - moveXn == -1) { - x = x - deplacement; - if (x < 100) x = 100; - } - - if (moveXp - moveXn == 1) { - x = x+ deplacement; - if (x > width - 100 ) x = width - 100; - } - } - - //Truc a faire à la fin... - void stop() { - } +// ajouter le son ? +boolean son = true; +boolean boss_start = false; + + + // ----------------------- \\ + + +// Importation librairies pour la gestion du sons +import processing.sound.*; +SoundFile sonLancemissile; +SoundFile sonExposion; +SoundFile sonCollision; +SoundFile sonLaser_boss; + +boolean test = false; +int largeur = 1600; +int hauteur = 900; +PImage space, img_ship, misile, imgGameover, imgWin, imgboss1, laserboss1; +String misileMechant1 = "data/images/misile - mechant.png"; +int x = largeur/2; +int y = hauteur-100; +int xm = x; +int ym = y; +int timerGameOver = 1500; // milliseconds d'attente avant affichage "Gameover" +int timer = 0; +int win; +float time; +boolean lancermisile = false; +String touchePresse = null; +//int nombreEnemiRestek = nombreEnemik; + +Ship ship; +Boss boss; + +boolean[] level = new boolean[3]; + +int nombreEnemi = 20; +int nombreEnemi_vague2 = 3; +int nombreEnemiReste = nombreEnemi; +Alien [] a = new Alien[nombreEnemi]; +Misile [] b = new Misile[nombreEnemi]; +Alien2 [] c = new Alien2[3]; + +//Etat de deplacement: 0 = aucun deplacement en cours +int moveXp = 0; // 1 si deplacement vers le bas +int moveXn = 0; // 1 si deplacement vers le haut +int moveYp = 0; // 1 si deplacement vers la droite +int moveYn = 0; // 1 si deplacement vers la gauche +int moveBoost = 1; + +boolean pause = false; + +void setup() { + + stroke(#000000); + strokeWeight(1); + textAlign(LEFT, TOP); + textSize(12); + size(1600, 900); + imageMode(CENTER); + + c[0] = new Alien2(800,350,5,"mechant_tres_mechant150x150.png"); + c[1] = new Alien2(1200,350,5,"mechant_tres_mechant150x150.png"); + c[2] = new Alien2(400,350,5,"mechant_tres_mechant150x150.png"); + + + //là, ça charge les images dans leurres varibles + space = loadImage("data/images/space.jpg"); + img_ship = loadImage("data/images/redfighter_200x200.png"); + misile = loadImage("data/images/misile.png"); + imgGameover = loadImage("data/images/gameover.png"); + imgWin = loadImage("data/images/Win_game.png"); + imgboss1 = loadImage("data/images/vaiseau_enemi.png"); + laserboss1 = loadImage("data/images/laser_boss1.png"); + + //création du boss + boss = new Boss(5, "vaiseau_enemi.png", 800, 171, 8); + //on crée le ship + ship = new Ship(x, y, 3, img_ship); + + //on crée des ennemis + for (int i = 0; i 9) { + j = i-10; + k =2; + } else { + j = i; + k =1; + } + a[i] = new Alien (100+(j*150), k*100, 1, "mechant_rouge_150x150.png"); + // a[i] = new Alien (100+(j*150), k*100, 3, "mechant_tres_mechant150x150.png"); + } + println("Affichage mechant"); + + + //on crée des misiles + for (int i = 0; i 9) { + j = i-10; + k =2; + } else { + j = i; + k =1; + } + b[i] = new Misile (100+(j*150), k*100, misileMechant1, time); + } + + // Sons + if (son) { + sonLancemissile = new SoundFile(this, "data/sons/lancemissile.mp3"); + sonExposion = new SoundFile(this, "data/sons/SFB-explosion2.mp3"); + sonCollision = new SoundFile(this, "data/sons/collision avec le vaisseau.mp3"); + sonLaser_boss = new SoundFile(this, "data/sons/Laser_boss.mp3"); + } + + //Vitesse : frame par seconde + frameRate(60); + } + + void draw() { + + // if ( nombreEnemiReste == 0 && ship.pv > 0) { + // + // + // } + //debug: + //println(nombreEnemiReste); + + + miseAJourDuDeplacement(); + + //Affiche l'image de fond (l'espace) + background(space); + + // Si un missile du ship est en cours (actif) + if (lancermisile) { + //on le fait avencer + ym = ym - 20; + // Si le missile sort en haut de l'écran + if (ym < 0) { + ym = y; + xm = x; + lancermisile = false; + } + // Affiche l'image du missile + image(misile, xm, ym); + } else { + //Sinon (missile non actif) + //on le affiche en dessous du vaiseau si encore vivant + if (ship.show) { + ym = y; + xm = x; + } + } + + // Fait une boucle sur tout le tableau d'ennemies + for ( int i = 0; i timer ) { + image(imgGameover, largeur/2, hauteur/2); + println("GAME OVER"); + noLoop(); + + } + } + + //Affiche le "WIN" Du niveau 1 + if ( nombreEnemiReste == 0 && boss.pv == 0) { + //image(imgWin, largeur/2, hauteur/2); + } + + if (boss.pv <= 3){ + // met a jour les méchants très méchants + c[0].affiche_et_mets_a_jour_les_mechants(); + c[1].affiche_et_mets_a_jour_les_mechants(); + c[2].affiche_et_mets_a_jour_les_mechants(); + //nombreEnemiReste_vague2 =+ 3; + } + + if (nombreEnemiReste == -3){ + if (boss.pv == 0){ + //on crée des misiles auto-guidés + + } + + } + + + + + //if ( nombreEnemiReste == 0 && boss_pv == 0) { + //on load la deuxièmme vague de vaisseau + //on crée des ennemis + // Fait une boucle sur tout le tableau d'ennemies + //for ( int i = 0; i 9) { + // j = i-10; + // k =2; + // } else { + // j = i; + // k =1; + // } + // a[i] = new Alien (100+(j*150), k*100, 3, mechant); + //} + + ////on crée des misiles + //for (int i = 0; i 9) { + // j = i-10; + // k =2; + // } else { + // j = i; + // k =1; + // } + // b[i] = new Misile (100+(j*150), k*100, misileMechant1, time); + //} + //} + + // // Fait une boucle sur tout le tableau d'ennemies + //for ( int i = 0; i height - 100 ) y = height - 100; + } + + if (moveXp - moveXn == -1) { + x = x - deplacement; + if (x < 100) x = 100; + } + + if (moveXp - moveXn == 1) { + x = x+ deplacement; + if (x > width - 100 ) x = width - 100; + } + } + + //Truc a faire à la fin... + void stop() { + }