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(); } }