From 991557090258979560407c73db3622d2f26bd7a0 Mon Sep 17 00:00:00 2001 From: Arthaud Oriol Date: Sat, 8 May 2021 14:53:35 +0200 Subject: [PATCH] Modification du samedi 08/05/21 --- Boss.pde | 312 ++++++++++------------ Bosss.pde | 180 +++++++++++++ Misile.pde | 4 +- Ship.pde | 147 +++++----- mechant.pde | 178 ++++++------ mechant_tres_mechant.pde => mechant_2.pde | 24 +- space_inviders.pde | 58 ++-- 7 files changed, 526 insertions(+), 377 deletions(-) create mode 100644 Bosss.pde rename mechant_tres_mechant.pde => mechant_2.pde (93%) diff --git a/Boss.pde b/Boss.pde index d74d930..fee1756 100644 --- a/Boss.pde +++ b/Boss.pde @@ -1,176 +1,136 @@ -boolean boss_d_ou_g = false; -int boss_bouge = 800; -int boss_y = 171; -int boss_vitesse = 8; -boolean collision_laser = false; -float boss_cooldown = 5; -float boss_time; -int boss_stop = 4; -int pv_baseboss = 5; -int boss_pv = pv_baseboss; -int Xa, Xb, Xc, Ya, Yb, Yc, Xd, Yd, Xe, Ye; -float time_game = millis()/1000; -float ABC, DBC, ACB, DCB, EBC, ECB; -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; -boolean invincible = false, son_Laser = false, clignote = false; -int invisi_time = 1000; // temps de d'invincibilité en millisecondes (2 secondes) -int deta_time, time_inv_boss; -int deta_cligno_time = 150; // temps de clignotage en millisecondes -int time_cligno_boss; - -void boss() { - - time_game = millis()/1000; - println("second : "+ time_game); - println("boss_time + boss_cooldown : " + boss_time + boss_cooldown); - if (boss_time + boss_cooldown < time_game && !invincible){ - boss_vitesse = 0; - image(laserboss1, boss_bouge, 380 + boss_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 = boss_bouge; - Ya = -100 + boss_y; - - Xb = boss_bouge - 566; - Yb = -100 + boss_y + 981; - - Xc = boss_bouge + 566; - Yc = Yb; - - //triangle(Xa, Ya, Xb, Yb, Xc, Yc); - - //coordonnées base du vaisseau: - Xd = x - 100; - Yd = y + 100; - - Xe = 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); - - //line(Xd, Yd, Xe, Ye); - //println("Xb, Xe : " + Xb + " <> " + Xe); - //test collisions avec le laser: - if (EBC > ABC || ACB < DCB) { - collision_laser = false; - } else { - collision_laser = true; - ship.collision = true; - println("collision : " + collision_laser); - } - - - // boucle fin d'attaque - if (boss_time + boss_cooldown + boss_stop < time_game){ - boss_cooldown = random(1, 7); - boss_vitesse = 8; - boss_time = time_game; - son_Laser = false; - } - - //println("boss_time + boss_cooldown + boss_stop : "+ boss_time + boss_cooldown + boss_stop); - } - - if(!clignote){ - image(imgboss1, boss_bouge, boss_y); - } - - if (boss_d_ou_g == true){ //si le boss vas vers la gauche - if (boss_bouge > 0){ //si le boss il n'est pas tout a gauche - boss_bouge -= 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 && boss_bouge < width){ - boss_bouge += boss_vitesse; - } else { - boss_d_ou_g = true; - } - - - - - //largeur en pixels en fonction des pv courants du boss - largeur_bar_vie_cible = W_jpv * boss_pv / pv_baseboss; - println ("T : " + largeur_bar_vie_T + " C : " + largeur_bar_vie_cible); - - if (time_inv_boss + deta_time <= millis()){ - if (largeur_bar_vie_T > largeur_bar_vie_cible){ - largeur_bar_vie_T -- ; - invincible = true; - } else { - invincible = false; - } - time_inv_boss = millis(); - } - - // clignotement : - if (invincible && time_cligno_boss + deta_cligno_time <= millis()) { - time_cligno_boss = millis(); - clignote = !clignote; - } else if (!invincible) { - clignote = false; - } - - //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(boss_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); - - if ( dist(ship.x, ship.y, boss_bouge, boss_y) < 200 ) { - // en gros le vaisseau éclate quand il touche le boss - ship.collision = true; - } else { - //si le missile est en contact avec le boss et qu'il n'est pas invincible le boss perd un point de vie - if ( dist(xm, ym, boss_bouge, boss_y) < 114 && !invincible ){ - boss_pv = boss_pv - 1; - sonCollision.play(); - time_inv_boss = time_cligno_boss = millis(); - //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 * boss_pv / pv_baseboss)); - //println("boss_pv : " + boss_pv + " :: deta_time : " + deta_time); - lancermisile = false; - clignote = false; - } - } -} +class Boss { + int pv, pv_baseboss; + boolean invincible = false; + float boss_time; + boolean boss_d_ou_g = false; + int boss_vitesse; + 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 = 1000; // 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; + + //var à récup + boolean collision_laser = false; + float boss_cooldown = 5; + int boss_stop = 4; + int Xa, Xb, Xc, Ya, Yb, Yc, Xd, Yd, Xe, Ye; + float time_game = millis()/1000; + float ABC, DBC, ACB, DCB, EBC, ECB; + int largeur_bar_vie_T = W_jpv; + int largeur_bar_vie_cible = W_jpv; + boolean son_Laser = false, clignote = false; + + + + Boss (int pvboss, String visuboss, int start_x, int start_y, int vitboss){ + boss_vitesse = vitboss; + x = start_x; + y = start_y; + pv = pv_baseboss = pvboss; + boss_time = millis()/1000; + visu_boss = loadImage("data/images/" + visuboss); + + } + + 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; + } + //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); + + //Suppression du missile + lancermisile = false; //a voir pour faire une classe pour le missile du ship + } + + } + + void bouge_boss(){ + + if (boss_d_ou_g == true){ //si le boss vas vers la gauche + if (x > 0){ //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){ + 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(){ + verifiercollisions(); + bouge_boss(); + apparaitre(); + + } + +} diff --git a/Bosss.pde b/Bosss.pde new file mode 100644 index 0000000..1180a2c --- /dev/null +++ b/Bosss.pde @@ -0,0 +1,180 @@ +boolean boss_d_ou_g = false; +int boss_bouge = 800; +int boss_y = 171; +int boss_vitesse = 8; +boolean collision_laser = false; +float boss_cooldown = 5; +float boss_time; +int boss_stop = 4; +int pv_baseboss = 5; +int boss_pv = pv_baseboss; +int Xa, Xb, Xc, Ya, Yb, Yc, Xd, Yd, Xe, Ye; +float time_game = millis()/1000; +float ABC, DBC, ACB, DCB, EBC, ECB; +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; +boolean invincible = false, son_Laser = false, clignote = false; +int invisi_time = 1000; // temps de d'invincibilité en millisecondes (2 secondes) +int deta_time, time_inv_boss; +int deta_cligno_time = 150; // temps de clignotage en millisecondes +int time_cligno_boss; + + + + +void bosss() { + + time_game = millis()/1000; + println("second : "+ time_game); + println("boss_time + boss_cooldown : " + boss_time + boss_cooldown); + if (boss_time + boss_cooldown < time_game && !invincible){ + boss_vitesse = 0; + image(laserboss1, boss_bouge, 380 + boss_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 = boss_bouge; + Ya = -100 + boss_y; + + Xb = boss_bouge - 566; + Yb = -100 + boss_y + 981; + + Xc = boss_bouge + 566; + Yc = Yb; + + //triangle(Xa, Ya, Xb, Yb, Xc, Yc); + + //coordonnées base du vaisseau: + Xd = x - 100; + Yd = y + 100; + + Xe = 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); + + //line(Xd, Yd, Xe, Ye); + //println("Xb, Xe : " + Xb + " <> " + Xe); + //test collisions avec le laser: + if (EBC > ABC || ACB < DCB) { + collision_laser = false; + } else { + collision_laser = true; + ship.collision = true; + println("collision : " + collision_laser); + } + + + // boucle fin d'attaque + if (boss_time + boss_cooldown + boss_stop < time_game){ + boss_cooldown = random(1, 7); + boss_vitesse = 8; + boss_time = time_game; + son_Laser = false; + } + + //println("boss_time + boss_cooldown + boss_stop : "+ boss_time + boss_cooldown + boss_stop); + } + + if(!clignote){ + image(imgboss1, boss_bouge, boss_y); + } + + if (boss_d_ou_g == true){ //si le boss vas vers la gauche + if (boss_bouge > 0){ //si le boss il n'est pas tout a gauche + boss_bouge -= 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 && boss_bouge < width){ + boss_bouge += boss_vitesse; + } else { + boss_d_ou_g = true; + } + + + + + //largeur en pixels en fonction des pv courants du boss + largeur_bar_vie_cible = W_jpv * boss_pv / pv_baseboss; + println ("T : " + largeur_bar_vie_T + " C : " + largeur_bar_vie_cible); + + if (time_inv_boss + deta_time <= millis()){ + if (largeur_bar_vie_T > largeur_bar_vie_cible){ + largeur_bar_vie_T -- ; + invincible = true; + } else { + invincible = false; + } + time_inv_boss = millis(); + } + + // clignotement : + if (invincible && time_cligno_boss + deta_cligno_time <= millis()) { + time_cligno_boss = millis(); + clignote = !clignote; + } else if (!invincible) { + clignote = false; + } + + //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(boss_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); + + if ( dist(ship.x, ship.y, boss_bouge, boss_y) < 200 ) { + // en gros le vaisseau éclate quand il touche le boss + ship.collision = true; + } else { + //si le missile est en contact avec le boss et qu'il n'est pas invincible le boss perd un point de vie + if ( dist(xm, ym, boss_bouge, boss_y) < 114 && !invincible ){ + boss_pv = boss_pv - 1; + sonCollision.play(); + time_inv_boss = time_cligno_boss = millis(); + //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 * boss_pv / pv_baseboss)); + //println("boss_pv : " + boss_pv + " :: deta_time : " + deta_time); + lancermisile = false; + clignote = false; + } + } + + } diff --git a/Misile.pde b/Misile.pde index 716978a..2f8c555 100644 --- a/Misile.pde +++ b/Misile.pde @@ -6,7 +6,7 @@ class Misile { int y,x,yStart; float time; - Misile(int xt,int yt,String misilet,float timet) { + Misile(int xt,int yt,String misilet,float timet) { x = xt; y = yStart = yt; time = timet; @@ -44,7 +44,7 @@ class Misile { } void tomber() { - y += 4; //ont peut changer cette variable(le nombre de la variable)pour changer la vitesse des missiles enemis. + 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() { diff --git a/Ship.pde b/Ship.pde index 3ad863a..a9c0760 100644 --- a/Ship.pde +++ b/Ship.pde @@ -1,73 +1,74 @@ -//ceci est TOUT le code qui concerne un Ship -class Ship { - - int x,y,pv; - PImage ship_explo; - boolean show; - boolean collision = false; - int NUMEROXEPLO = 0; - - Ship(int xt,int yt, int pvt, PImage imaget){ - x = xt; - y = yt; - ship_explo = imaget; - show = true; - pv = pvt; - } - - void apparaitre() { - - //affiche l'anime de explosion : - if ( !show && NUMEROXEPLO<50 ) { - - // Ou Methode avec un if : - if ( String.valueOf(NUMEROXEPLO).length()==1 ) ship_explo = loadImage("data/images/explosion/explosion000"+NUMEROXEPLO+".png"); - else ship_explo = 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) image(ship_explo, x, y); - - } - - void set_position(int xn,int yn) { - if (show) { - x = xn; - y = yn; - } - } - - void verifiercollisions() { - - // avec un mechant: - if (collision) { - - // on luis enleve un point de vie - pv = pv - 1; - collision = false; - - //le vaiseau disparait si il a plus de vie : - if ( pv == 0 ) { - show = false; - } - } - - } - - - void affiche_et_mets_a_jour_le_ship(int xn,int yn) { - if (show) { - set_position(xn,yn); - verifiercollisions(); - - } - //Jusqu'à la fin de l'animation de l'explosion - apparaitre(); - - } - -} +//ceci est TOUT le code qui concerne un Ship +class Ship { + + int x,y,pv; + PImage ship_explo; + boolean show; + boolean collision = false; + int NUMEROXEPLO = 0; + boolean missileactif = false; + + Ship(int xt,int yt, int pvt, PImage imaget){ + x = xt; + y = yt; + ship_explo = imaget; + show = true; + pv = pvt; + } + + void apparaitre() { + + //affiche l'anime de explosion : + if ( !show && NUMEROXEPLO<50 ) { + + // Ou Methode avec un if : + if ( String.valueOf(NUMEROXEPLO).length()==1 ) ship_explo = loadImage("data/images/explosion/explosion000"+NUMEROXEPLO+".png"); + else ship_explo = 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) image(ship_explo, x, y); + + } + + void set_position(int xn,int yn) { + if (show) { + x = xn; + y = yn; + } + } + + void verifiercollisions() { + + // avec un mechant: + if (collision) { + + // on luis enleve un point de vie + pv = pv - 1; + collision = false; + + //le vaiseau disparait si il a plus de vie : + if ( pv == 0 ) { + show = false; + } + } + + } + + + void affiche_et_mets_a_jour_le_ship(int xn,int yn) { + if (show) { + set_position(xn,yn); + verifiercollisions(); + + } + //Jusqu'à la fin de l'animation de l'explosion + apparaitre(); + + } + +} diff --git a/mechant.pde b/mechant.pde index 23a5484..830680d 100644 --- a/mechant.pde +++ b/mechant.pde @@ -1,89 +1,89 @@ -//ça c'est TOUT le code qui dit ce que c'est un enemy -class Alien { - - int x,y,enemypv; - PImage enemy_explo; - boolean show; - float time; - int NUMEROXEPLO = 0; - - Alien(int xt,int yt,int pv, String imgEenemyt /*float timet*/){ - x = xt; - y = yt; - enemy_explo = loadImage("data/images/" + imgEenemyt); - show = true; - enemypv = pv; - /*time = timet;*/ - } - - void apparaitre() { - - //affiche l'anime de explosion : - if ( !show && NUMEROXEPLO<50 ) { - - //// Methode avec calcul du nombre de zeros: - //// 4 - le nb de carateres de l'entier NUMEROXEPLO [4 correspond au nb de zero du nom des fichiers] - //int nbCarateres = String.valueOf(NUMEROXEPLO).length(); - //int nbZeros = 4 - nbCarateres; - //String chainDeZero = new String(new char[nbZeros]).replace("\0", "0"); - //enemy = loadImage("images/explosion/explosion"+chainDeZero+NUMEROXEPLO+".png"); - - // Ou Methode avec un if : - if ( String.valueOf(NUMEROXEPLO).length()==1 ) enemy_explo = loadImage("data/images/explosion/explosion000"+NUMEROXEPLO+".png"); - else enemy_explo = loadImage("data/images/explosion/explosion00"+NUMEROXEPLO+".png"); - - NUMEROXEPLO += 1; - - } - - if (NUMEROXEPLO == 1 && son) { - sonExposion.play(); - nombreEnemiReste -= 1; - - } - - //Affiche le mechant ou explosion s'il n'est pas détruis (l'anime de explosion est pas finie) - if (NUMEROXEPLO < 50) image(enemy_explo, x, y); - - - } - - - void verifiercollisions() { - - // Avec le missile - if ( show && !( xm < x-40 || xm > x+40 ) && ym < y) { - - // on luis enleve un point de vie - enemypv = enemypv - 1; - y = y - 20; - - //suprime le missile - lancermisile = false; - } - - // Avec le ship - // DEBUG : Affiche x et y dans la console - //println(dist(ship.x, ship.y, x, y) + "ship.x : " + ship.x + " < " + (x-75) + " : > " + (x+75) + " ship.y : " + ship.y + " <> " +y); - if ( dist(ship.x, ship.y, x, y) < 130 ) { - // Averti le vaiseau de la collision - ship.collision = true; - - // on luis enleve un point de vie - enemypv = enemypv - 1; - y = y - 20; - } - - //le mechant disparait si il a plus de vie : - if ( enemypv == 0 ) { - show = false; - } - } - - - void affiche_et_mets_a_jour_les_mechants() { - verifiercollisions(); - apparaitre(); - } - -} +//ça c'est TOUT le code qui dit ce que c'est un enemy +class Alien { + + int x,y, enemypv; + PImage enemy_explo; + boolean show; + float time; + int NUMEROXEPLO = 0; + + Alien(int xt,int yt,int pv, String imgEenemyt /*float timet*/){ + x = xt; + y = yt; + enemy_explo = loadImage("data/images/" + imgEenemyt); + show = true; + enemypv = pv; + /*time = timet;*/ + } + + void apparaitre() { + + //affiche l'anime de explosion : + if ( !show && NUMEROXEPLO<50 ) { + + //// Methode avec calcul du nombre de zeros: + //// 4 - le nb de carateres de l'entier NUMEROXEPLO [4 correspond au nb de zero du nom des fichiers] + //int nbCarateres = String.valueOf(NUMEROXEPLO).length(); + //int nbZeros = 4 - nbCarateres; + //String chainDeZero = new String(new char[nbZeros]).replace("\0", "0"); + //enemy = loadImage("images/explosion/explosion"+chainDeZero+NUMEROXEPLO+".png"); + + // Ou Methode avec un if : + if ( String.valueOf(NUMEROXEPLO).length()==1 ) enemy_explo = loadImage("data/images/explosion/explosion000"+NUMEROXEPLO+".png"); + else enemy_explo = loadImage("data/images/explosion/explosion00"+NUMEROXEPLO+".png"); + + NUMEROXEPLO += 1; + + } + + if (NUMEROXEPLO == 1 && son) { + sonExposion.play(); + nombreEnemiReste -= 1; + + } + + //Affiche le mechant ou explosion s'il n'est pas détruis (l'anime de explosion est pas finie) + if (NUMEROXEPLO < 50) image(enemy_explo, x, y); + + + } + + + void verifiercollisions() { + + // Avec le missile + if ( show && !( xm < x-40 || xm > x+40 ) && ym < y) { + + // on luis enleve un point de vie + enemypv = enemypv - 1; + y = y - 20; + + //suprime le missile + lancermisile = false; + } + + // Avec le ship + // DEBUG : Affiche x et y dans la console + //println(dist(ship.x, ship.y, x, y) + "ship.x : " + ship.x + " < " + (x-75) + " : > " + (x+75) + " ship.y : " + ship.y + " <> " +y); + if ( dist(ship.x, ship.y, x, y) < 130 ) { + // Averti le vaiseau de la collision + ship.collision = true; + + // on luis enleve un point de vie + enemypv = enemypv - 1; + y = y - 20; + } + + //le mechant disparait si il a plus de vie : + if ( enemypv == 0 ) { + show = false; + } + } + + + void affiche_et_mets_a_jour_les_mechants() { + verifiercollisions(); + apparaitre(); + } + +} diff --git a/mechant_tres_mechant.pde b/mechant_2.pde similarity index 93% rename from mechant_tres_mechant.pde rename to mechant_2.pde index fe82fbe..7f5a1af 100644 --- a/mechant_tres_mechant.pde +++ b/mechant_2.pde @@ -23,8 +23,8 @@ class Alien2 { randomy = (int) random(0,900); randomx = (int) random(0,1600); - frameRate(600); - if (frameCount % 600 == 0) { + //frameRate(100); + if (frameCount % (60 * 5) == 0) { x = randomx; y = randomy; println ("random = "+randomy); @@ -45,9 +45,10 @@ class Alien2 { if (NUMEROXEPLO == 1 && son) { sonExposion.play(); - nombreEnemiReste -= 1; } + if (NUMEROXEPLO == 1) nombreEnemiReste -= 1; + //Affiche le mechant ou explosion s'il n'est pas détruis (l'anime de explosion est pas finie) if (NUMEROXEPLO < 50) image(enemy_explo, x, y); @@ -56,7 +57,7 @@ class Alien2 { void verifiercollisions() { // Avec le missile - if ( show && !( xm < x-40 || xm > x+40 ) && ym < y) { + if ( show && dist(xm, ym, x, y) < 80) { // on luis enleve un point de vie enemypv = enemypv - 1; @@ -69,7 +70,7 @@ class Alien2 { // Avec le ship // DEBUG : Affiche x et y dans la console //println(dist(ship.x, ship.y, x, y) + "ship.x : " + ship.x + " < " + (x-75) + " : > " + (x+75) + " ship.y : " + ship.y + " <> " +y); - if ( dist(ship.x, ship.y, x, y) < 130 ) { + if ( dist(ship.x, ship.y, x, y) < 130 && show) { // Averti le vaiseau de la collision ship.collision = true; @@ -78,10 +79,6 @@ class Alien2 { y = y - 20; } - if ( nombreEnemiReste == 0 && boss_pv == 0) { - - } - //le mechant disparait si il a plus de vie : if ( enemypv == 0 ) { show = false; @@ -93,7 +90,7 @@ class Alien2 { // return random; //} - int cooldown_fonce = (int)random(10); + //int cooldown_fonce = (int)random(10); /* //le if doit etre dans une fonction ou une class ou void ... @@ -107,9 +104,12 @@ class Alien2 { */ void affiche_et_mets_a_jour_les_mechants() { - verifiercollisions(); + //println("affiche_et_mets_a_jour_les_mechants :"); + if (show) { + verifiercollisions(); + alea_bouge(); + } apparaitre(); - alea_bouge(); } } diff --git a/space_inviders.pde b/space_inviders.pde index bca6ea9..9ac994c 100644 --- a/space_inviders.pde +++ b/space_inviders.pde @@ -31,11 +31,12 @@ String touchePresse = null; //int nombreEnemiRestek = nombreEnemik; Ship ship; +Boss boss; boolean[] level = new boolean[3]; int nombreEnemi = 20; -int nombreEnemik = 20; +int nombreEnemi_vague2 = 3; int nombreEnemiReste = nombreEnemi; Alien [] a = new Alien[nombreEnemi]; Misile [] b = new Misile[nombreEnemi]; @@ -50,8 +51,6 @@ int moveBoost = 1; boolean pause = false; - - void setup() { stroke(#000000); @@ -60,18 +59,23 @@ void setup() { 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"); - //2 pour le skin 2 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); @@ -86,13 +90,12 @@ void setup() { j = i; k =1; } - a[i] = new Alien (100+(j*150), k*100, 3, "mechant_rouge_150x150.png"); - //a[i] = new Alien (100+(j*150), k*100, 3, "mechant_tres_mechant150x150.png"); + 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"); + - c[0] = new Alien2(800,350,20,"mechant_tres_mechant150x150.png"); - c[1] = new Alien2(1200,350,20,"mechant_tres_mechant150x150.png"); - c[2] = new Alien2(400,350,20,"mechant_tres_mechant150x150.png"); //on crée des misiles for (int i = 0; i 0) { + //Affiche le boss Du niveau 1 (ancienne méthode sans la classe boss) + if ( false && nombreEnemiReste == 0 && boss_pv > 0) { // image(imgWin, largeur/2, hauteur/2); if (boss_start == false) { boss_start = true; boss_time = millis()/1000; } - boss(); + //bosss(); + } + + //Affiche le boss Classe 1 + text("énemis restant: " + nombreEnemiReste, 120, 20); + if ( nombreEnemiReste <= 0) { + boss.affiche_et_mets_a_jour_le_boss(); } // Mise à jour du texte de l'écran : @@ -208,14 +212,19 @@ void setup() { } //Affiche le "WIN" Du niveau 1 - if ( nombreEnemiReste == 0 && boss_pv == 0) { + 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) { + //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 @@ -264,7 +273,7 @@ void setup() { // } // 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