diff --git a/Boss.pde b/Boss.pde index 842901b..8d970c9 100644 --- a/Boss.pde +++ b/Boss.pde @@ -1,242 +1,242 @@ -class Boss { - - int pv, pv_baseboss; - boolean invincible = false; - float boss_time; - boolean boss_d_ou_g = false; - int boss_vitesse, default_bosvit; - float boss_cooldown = 5; - boolean collision_laser = false; - PImage visu_boss; - int y; - int x; //égale à ancien "boss_bouge" - boolean show = true; - int NUMEROXEPLO = 0; - int deta_time; - int time_inv_boss, invisi_time = 2000; // temps de d'invincibilité en millisecondes (2 secondes) - int time_cligno_boss, deta_cligno_time = 150; // temps de clignotage en millisecondes - //jauge des pv du boss - int H_jpv = 25, W_jpv = 650, x_jpv, y_jpv = 20; - int largeur_bar_vie_T = W_jpv; - int largeur_bar_vie_cible = W_jpv; - //laser - int Xa, Xb, Xc, Ya, Yb, Yc, Xd, Yd, Xe, Ye; - float ABC, DBC, ACB, DCB, EBC, ECB; - int boss_stop = 4; - boolean son_Laser = false, clignote = false; - - - Boss (int pvboss, String visuboss, int start_x, int start_y, int vitboss){ - boss_vitesse = default_bosvit = vitboss; - x = start_x; - y = start_y; - pv = pv_baseboss = pvboss; - boss_time = millis()/1000; - visu_boss = loadImage("data/images/" + visuboss); - - } - - void BarDeVieBoss(){ - - //largeur en pixels en fonction des pv courants du boss - largeur_bar_vie_cible = W_jpv * pv / pv_baseboss; - //println ("T : " + largeur_bar_vie_T + " C : " + largeur_bar_vie_cible); - - //calcul delai en miliseconds pour chaque pixels a supprimer de la bars de vie en fonction du temps d'invincibilité du boss - // temps / pixels a suprimmer de la barre : - //deta_time = invisi_time / (W_jpv - (W_jpv * pv / pv_baseboss)); - //println("pv : " + pv + " :: invincible : " + invincible+ " :: deta_time : " + deta_time); - - //jauge des pv du boss - x_jpv = width/2-W_jpv/2; - fill(255, 255, 255, 40); - noStroke(); - rect(x_jpv, y_jpv, W_jpv, H_jpv, H_jpv / 2); - fill(#AE0202, 230); - noStroke(); - rect( - x_jpv + (W_jpv - largeur_bar_vie_T)/2, // coordonnées X de la bar de vie - y_jpv, // coordonnées Y de la bar de vie - largeur_bar_vie_T, - H_jpv, // hauteur de la bar de vie - H_jpv / 2 // pour arrondir les angles de la bar de vie du boss - ); - fill(255); - textSize(H_jpv / 1.5); - textAlign(CENTER, CENTER); - text(pv + " / " + pv_baseboss , x_jpv + W_jpv / 2 , y_jpv + H_jpv /2); - textAlign(LEFT, BOTTOM); - textSize(12); - strokeWeight(2); - stroke(#ffffff); - - noFill(); - rect(x_jpv, y_jpv, W_jpv, H_jpv, H_jpv / 2); - fill(255, 255, 255); - strokeWeight(1); - stroke(#000000); - } - - void verifiercollisions(){ - - //vérifie s'il y a une collisions avec le vaisseau - if ( dist(ship.x, ship.y, x, y) < 200 && show) { - ship.collision = true; - } - - //println("pv : " + pv); - - //vérifie les collisions du missile du notre vaisseau sur le boss - if ( dist(xm, ym, x, y) < 114 && !invincible && show){ - //invincible = true; - clignote = false; - pv = pv - 1; - sonCollision.play(); - if (pv > 0) { - time_inv_boss = millis() + invisi_time; - invincible = true; - } else { - show = false; - } - //Suppression du missile - lancermisile = false; //a voir pour faire une classe pour le missile du ship - } - - //vérification de la collision avec le laser du boss - if(boss_vitesse == 0){ - //coordonnées base du vaisseau: - Xd = ship.x - 100; - Yd = ship.y + 100; - - Xe = ship.x + 100; - Ye = Yd; - - //calcul des angles - ABC = acos( ( ((Xc-Xb)*(Xa-Xb)) + ((Yc-Yb)*(Ya-Yb)) )/( sqrt(sq(Xc-Xb)+sq(Yc-Yb)) * sqrt(sq(Xa-Xb)+sq(Ya-Yb)) ) ); - ACB = ABC; - //println("ABC : "+ ABC); - //DBC = acos( ( ((Xc-Xb)*(Xd-Xb)) + ((Yc-Yb)*(Yd-Yb)) )/( sqrt(sq(Xc-Xb)+sq(Yc-Yb)) * sqrt(sq(Xd-Xb)+sq(Yd-Yb)) ) ); - DCB = acos( ( ((Xb-Xc)*(Xd-Xc)) + ((Yb-Yc)*(Yd-Yc)) )/( sqrt(sq(Xb-Xc)+sq(Yb-Yc)) * sqrt(sq(Xd-Xc)+sq(Yd-Yc)) ) ); - EBC = acos( ( ((Xc-Xb)*(Xe-Xb)) + ((Yc-Yb)*(Ye-Yb)) )/( sqrt(sq(Xc-Xb)+sq(Yc-Yb)) * sqrt(sq(Xe-Xb)+sq(Ye-Yb)) ) ); - //println("DCB : "+ DCB + " / EBC : "+ EBC); - - stroke(204, 102, 0); - strokeWeight(4); - line(Xd, Yd, Xe, Ye); - //println("Ye, Xe : " + Ye + " <> " + Xe); - //println("Xd, Yd : " + Xd + " <> " + Yd); - - //test collisions avec le laser: - if (EBC > ABC || ACB < DCB) { - collision_laser = false; - //println("collision laser: " + collision_laser); - } else { - collision_laser = true; - ship.collision = true; - //println("collision laser: " + collision_laser); - } - } - - } - - void bouge_boss(){ - - //gestion du laser - if (boss_time + boss_cooldown < millis()/1000 && !invincible && pv > 0) { - boss_vitesse = 0; - image(laserboss1, x, 380 + y); - //joue le son du laser une seul fois - if(!son_Laser){ - son_Laser = true; - sonLaser_boss.play(); - } - //calcul dimension laser: - //coordonnées point haut - Xa = x; - Ya = -100 + y; - - Xb = x - 566; - Yb = -100 + y + 981; - - Xc = x + 566; - Yc = Yb; - - //triangle(Xa, Ya, Xb, Yb, Xc, Yc); - - // boucle fin d'attaque - if (boss_time + boss_cooldown + boss_stop < millis()/1000){ - boss_cooldown = random(1, 7); - boss_vitesse = default_bosvit++; - //default_bosvit += 1; - boss_time = millis()/1000; - son_Laser = false; - } - - //println("boss_time + boss_cooldown + boss_stop : "+ boss_time + boss_cooldown + boss_stop); - } - - if (boss_d_ou_g == true){ //si le boss vas vers la gauche - if (x > 100){ //si le boss il n'est pas tout a gauche - x -= boss_vitesse; //on le fais aller a gauche - } else { //sinon - boss_d_ou_g = false; //on lui dit d'aller a gauche - } - } - - if (boss_d_ou_g == false && x < width-100){ - x += boss_vitesse; - } else { - boss_d_ou_g = true; - } - - } - - void apparaitre(){ - -//println("invincible : " + invincible + " :: time_inv_boss : " + time_inv_boss + " :: millis() : " + millis() ); - - // invincibileté : - if (invincible && time_inv_boss > millis()) { - //time_inv_boss = millis(); - invincible = true; - } else { - clignote = invincible = false; - } - - if (largeur_bar_vie_T > largeur_bar_vie_cible){ - largeur_bar_vie_T -- ; - } - - // clignotement : - if (invincible && time_cligno_boss + deta_cligno_time <= millis()) { - time_cligno_boss = millis(); - clignote = !clignote; - } - - - //affiche l'anime de explosion : - if ( !show && NUMEROXEPLO<50 ) { - // Ou Methode avec un if : - if ( String.valueOf(NUMEROXEPLO).length()==1 ) visu_boss = loadImage("data/images/explosion/explosion000"+NUMEROXEPLO+".png"); - else visu_boss = loadImage("data/images/explosion/explosion00"+NUMEROXEPLO+".png"); - NUMEROXEPLO += 1; - } - - if (NUMEROXEPLO == 1 && son) sonExposion.play(); - - //Affiche le ship ou explosion s'il n'est pas détruis (l'anime de explosion est pas finie) - if (NUMEROXEPLO < 50 && !clignote) image(visu_boss, x, y); - //println("boss .."); - - - } - - void affiche_et_mets_a_jour_le_boss(){ - BarDeVieBoss(); - verifiercollisions(); - bouge_boss(); - apparaitre(); - - } - -} +class Boss { + + int pv, pv_baseboss; + boolean invincible = false; + float boss_time; + boolean boss_d_ou_g = false; + int boss_vitesse, default_bosvit; + float boss_cooldown = 5; + boolean collision_laser = false; + PImage visu_boss; + int y; + int x; //égale à ancien "boss_bouge" + boolean show = true; + int NUMEROXEPLO = 0; + int deta_time; + int time_inv_boss, invisi_time = 2000; // temps de d'invincibilité en millisecondes (2 secondes) + int time_cligno_boss, deta_cligno_time = 150; // temps de clignotage en millisecondes + //jauge des pv du boss + int H_jpv = 25, W_jpv = 650, x_jpv, y_jpv = 20; + int largeur_bar_vie_T = W_jpv; + int largeur_bar_vie_cible = W_jpv; + //laser + int Xa, Xb, Xc, Ya, Yb, Yc, Xd, Yd, Xe, Ye; + float ABC, DBC, ACB, DCB, EBC, ECB; + int boss_stop = 4; + boolean son_Laser = false, clignote = false; + + + Boss (int pvboss, String visuboss, int start_x, int start_y, int vitboss){ + boss_vitesse = default_bosvit = vitboss; + x = start_x; + y = start_y; + pv = pv_baseboss = pvboss; + boss_time = millis()/1000; + visu_boss = loadImage("data/images/" + visuboss); + + } + + void BarDeVieBoss(){ + + //largeur en pixels en fonction des pv courants du boss + largeur_bar_vie_cible = W_jpv * pv / pv_baseboss; + //println ("T : " + largeur_bar_vie_T + " C : " + largeur_bar_vie_cible); + + //calcul delai en miliseconds pour chaque pixels a supprimer de la bars de vie en fonction du temps d'invincibilité du boss + // temps / pixels a suprimmer de la barre : + //deta_time = invisi_time / (W_jpv - (W_jpv * pv / pv_baseboss)); + //println("pv : " + pv + " :: invincible : " + invincible+ " :: deta_time : " + deta_time); + + //jauge des pv du boss + x_jpv = width/2-W_jpv/2; + fill(255, 255, 255, 40); + noStroke(); + rect(x_jpv, y_jpv, W_jpv, H_jpv, H_jpv / 2); + fill(#AE0202, 230); + noStroke(); + rect( + x_jpv + (W_jpv - largeur_bar_vie_T)/2, // coordonnées X de la bar de vie + y_jpv, // coordonnées Y de la bar de vie + largeur_bar_vie_T, + H_jpv, // hauteur de la bar de vie + H_jpv / 2 // pour arrondir les angles de la bar de vie du boss + ); + fill(255); + textSize(H_jpv / 1.5); + textAlign(CENTER, CENTER); + text(pv + " / " + pv_baseboss , x_jpv + W_jpv / 2 , y_jpv + H_jpv /2); + textAlign(LEFT, BOTTOM); + textSize(12); + strokeWeight(2); + stroke(#ffffff); + + noFill(); + rect(x_jpv, y_jpv, W_jpv, H_jpv, H_jpv / 2); + fill(255, 255, 255); + strokeWeight(1); + stroke(#000000); + } + + void verifiercollisions(){ + + //vérifie s'il y a une collisions avec le vaisseau + if ( dist(ship.x, ship.y, x, y) < 200 && show) { + ship.collision = true; + } + + //println("pv : " + pv); + + //vérifie les collisions du missile du notre vaisseau sur le boss + if ( dist(xm, ym, x, y) < 114 && !invincible && show){ + //invincible = true; + clignote = false; + pv = pv - 1; + sonCollision.play(); + if (pv > 0) { + time_inv_boss = millis() + invisi_time; + invincible = true; + } else { + show = false; + } + //Suppression du missile + lancermisile = false; //a voir pour faire une classe pour le missile du ship + } + + //vérification de la collision avec le laser du boss + if(boss_vitesse == 0){ + //coordonnées base du vaisseau: + Xd = ship.x - 100; + Yd = ship.y + 100; + + Xe = ship.x + 100; + Ye = Yd; + + //calcul des angles + ABC = acos( ( ((Xc-Xb)*(Xa-Xb)) + ((Yc-Yb)*(Ya-Yb)) )/( sqrt(sq(Xc-Xb)+sq(Yc-Yb)) * sqrt(sq(Xa-Xb)+sq(Ya-Yb)) ) ); + ACB = ABC; + //println("ABC : "+ ABC); + //DBC = acos( ( ((Xc-Xb)*(Xd-Xb)) + ((Yc-Yb)*(Yd-Yb)) )/( sqrt(sq(Xc-Xb)+sq(Yc-Yb)) * sqrt(sq(Xd-Xb)+sq(Yd-Yb)) ) ); + DCB = acos( ( ((Xb-Xc)*(Xd-Xc)) + ((Yb-Yc)*(Yd-Yc)) )/( sqrt(sq(Xb-Xc)+sq(Yb-Yc)) * sqrt(sq(Xd-Xc)+sq(Yd-Yc)) ) ); + EBC = acos( ( ((Xc-Xb)*(Xe-Xb)) + ((Yc-Yb)*(Ye-Yb)) )/( sqrt(sq(Xc-Xb)+sq(Yc-Yb)) * sqrt(sq(Xe-Xb)+sq(Ye-Yb)) ) ); + //println("DCB : "+ DCB + " / EBC : "+ EBC); + + stroke(204, 102, 0); + strokeWeight(4); + line(Xd, Yd, Xe, Ye); + //println("Ye, Xe : " + Ye + " <> " + Xe); + //println("Xd, Yd : " + Xd + " <> " + Yd); + + //test collisions avec le laser: + if (EBC > ABC || ACB < DCB) { + collision_laser = false; + //println("collision laser: " + collision_laser); + } else { + collision_laser = true; + ship.collision = true; + //println("collision laser: " + collision_laser); + } + } + + } + + void bouge_boss(){ + + //gestion du laser + if (boss_time + boss_cooldown < millis()/1000 && !invincible && pv > 0) { + boss_vitesse = 0; + image(laserboss1, x, 380 + y); + //joue le son du laser une seul fois + if(!son_Laser){ + son_Laser = true; + sonLaser_boss.play(); + } + //calcul dimension laser: + //coordonnées point haut + Xa = x; + Ya = -100 + y; + + Xb = x - 566; + Yb = -100 + y + 981; + + Xc = x + 566; + Yc = Yb; + + //triangle(Xa, Ya, Xb, Yb, Xc, Yc); + + // boucle fin d'attaque + if (boss_time + boss_cooldown + boss_stop < millis()/1000){ + boss_cooldown = random(1, 7); + boss_vitesse = default_bosvit++; + //default_bosvit += 1; + boss_time = millis()/1000; + son_Laser = false; + } + + //println("boss_time + boss_cooldown + boss_stop : "+ boss_time + boss_cooldown + boss_stop); + } + + if (boss_d_ou_g == true){ //si le boss vas vers la gauche + if (x > 100){ //si le boss il n'est pas tout a gauche + x -= boss_vitesse; //on le fais aller a gauche + } else { //sinon + boss_d_ou_g = false; //on lui dit d'aller a gauche + } + } + + if (boss_d_ou_g == false && x < width-100){ + x += boss_vitesse; + } else { + boss_d_ou_g = true; + } + + } + + void apparaitre(){ + +//println("invincible : " + invincible + " :: time_inv_boss : " + time_inv_boss + " :: millis() : " + millis() ); + + // invincibileté : + if (invincible && time_inv_boss > millis()) { + //time_inv_boss = millis(); + invincible = true; + } else { + clignote = invincible = false; + } + + if (largeur_bar_vie_T > largeur_bar_vie_cible){ + largeur_bar_vie_T -- ; + } + + // clignotement : + if (invincible && time_cligno_boss + deta_cligno_time <= millis()) { + time_cligno_boss = millis(); + clignote = !clignote; + } + + + //affiche l'anime de explosion : + if ( !show && NUMEROXEPLO<50 ) { + // Ou Methode avec un if : + if ( String.valueOf(NUMEROXEPLO).length()==1 ) visu_boss = loadImage("data/images/explosion/explosion000"+NUMEROXEPLO+".png"); + else visu_boss = loadImage("data/images/explosion/explosion00"+NUMEROXEPLO+".png"); + NUMEROXEPLO += 1; + } + + if (NUMEROXEPLO == 1 && son) sonExposion.play(); + + //Affiche le ship ou explosion s'il n'est pas détruis (l'anime de explosion est pas finie) + if (NUMEROXEPLO < 50 && !clignote) image(visu_boss, x, y); + //println("boss .."); + + + } + + void affiche_et_mets_a_jour_le_boss(){ + BarDeVieBoss(); + verifiercollisions(); + bouge_boss(); + apparaitre(); + + } + +} diff --git a/data/images/misile - mechant.png b/data/images/misile_mechant.png similarity index 100% rename from data/images/misile - mechant.png rename to data/images/misile_mechant.png diff --git a/misille_guides.pde b/misille_guides.pde index 70f1c49..b39bc4a 100644 --- a/misille_guides.pde +++ b/misille_guides.pde @@ -2,7 +2,7 @@ //code des Misiles des méchants class MisileGuides { - boolean show = false; + boolean show2 = false; PImage misile; int y,x,yStart; float time; @@ -13,13 +13,22 @@ class MisileGuides { time = timet; misile = loadImage(misilet); } - + void guide() { if (x < ship.x) { - while(x < ship.x){ - y -= 6; - x += 6; - } + x = x + 6; + + if (y < ship.y) { + y = y + 6; + + + + // while(x < ship.x){ + // y += 6; + // x += 6; + //} + + } } } void apparaitre() { @@ -29,12 +38,13 @@ class MisileGuides { void verifiercollisions() { // Si un missile est en cours - if (show) { + if (show2) { // Si le missile sort en bas de l'écran if (y > hauteur) { + println(show2); //on supprime le missile - show = false; + show2 = false; //on remet le y du missile pour le prochain y = yStart; } @@ -45,7 +55,7 @@ class MisileGuides { sonCollision.play(); // supprime le missile - show = false; + show2 = false; } } @@ -56,16 +66,14 @@ class MisileGuides { // 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(); + void affiche_et_mets_a_jour_le_missile_guides() { + //println(show2); + if (show2 == true) { 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; - } + guide(); + + } } } diff --git a/space_inviders.pde b/space_inviders.pde index 33050b8..0118607 100644 --- a/space_inviders.pde +++ b/space_inviders.pde @@ -1,405 +1,409 @@ -// 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 d = true; -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, 999999, 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 (boss.pv == 0){ - MisileGuides [] d = new MisileGuides[0]; - d[d] = new Misile (100+(j*150), k*100, misileMechant1, time); - //d[0].affiche_et_mets_a_jour_le_missile_guides(); - } - - - //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=0; +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]; +MisileGuides [] d = new MisileGuides[1]; + +//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, 5, 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); + } + + /* missile guidés */ + d[0] = new MisileGuides (100+(1*150), 1*100, misileMechant1, 0); + + // 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){ + d[0].affiche_et_mets_a_jour_le_missile_guides(); + d[0].show2 = true; + //println(d[0].show2); + } + + } + + + + + + + //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() { + } diff --git a/space_inviders.pde2782616693640937194.tmp b/space_inviders.pde2782616693640937194.tmp new file mode 100644 index 0000000..e69de29