Modification du samedi 03/04/2021 : Création d'une Classe pour le boss
This commit is contained in:
parent
457ae004c4
commit
6f331a90b6
248
Boss.pde
248
Boss.pde
|
|
@ -1,176 +1,72 @@
|
|||
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;
|
||||
float boss_time;
|
||||
int boss_vitesse;
|
||||
PImage visu_boss;
|
||||
int boss_y;
|
||||
int boss_x; //égale à ancien "boss_bouge"
|
||||
boolean show = true;
|
||||
int NUMEROXEPLO = 0;
|
||||
|
||||
//var à récup
|
||||
boolean boss_d_ou_g = false;
|
||||
boolean collision_laser = false;
|
||||
float boss_cooldown = 5;
|
||||
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;
|
||||
|
||||
|
||||
Boss (int pvboss, String visuboss, int xb, int yb, int bv){
|
||||
boss_vitesse = bv;
|
||||
boss_x = xb;
|
||||
boss_y = yb;
|
||||
pv = pvboss;
|
||||
boss_time = millis()/1000;
|
||||
visu_boss = loadImage("data/images/" + visuboss);
|
||||
|
||||
}
|
||||
|
||||
void verifiercollisions(){
|
||||
|
||||
}
|
||||
|
||||
void bouge_boss(){
|
||||
|
||||
}
|
||||
|
||||
void apparaitre(){
|
||||
//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) image(visu_boss, boss_x, boss_y);
|
||||
println("boss ..");
|
||||
}
|
||||
|
||||
void affiche_et_mets_a_jour_le_boss(){
|
||||
verifiercollisions();
|
||||
bouge_boss();
|
||||
apparaitre();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,179 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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() {
|
||||
|
|
|
|||
178
mechant.pde
178
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -107,9 +107,10 @@ class Alien2 {
|
|||
*/
|
||||
|
||||
void affiche_et_mets_a_jour_les_mechants() {
|
||||
println("affiche_et_mets_a_jour_les_mechants :");
|
||||
verifiercollisions();
|
||||
apparaitre();
|
||||
alea_bouge();
|
||||
alea_bouge();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -31,6 +31,7 @@ String touchePresse = null;
|
|||
//int nombreEnemiRestek = nombreEnemik;
|
||||
|
||||
Ship ship;
|
||||
Boss boss;
|
||||
|
||||
boolean[] level = new boolean[3];
|
||||
|
||||
|
|
@ -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,10,"mechant_tres_mechant150x150.png");
|
||||
c[1] = new Alien2(1200,350,10,"mechant_tres_mechant150x150.png");
|
||||
c[2] = new Alien2(400,350,10,"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<nombreEnemi; i++) {
|
||||
|
|
@ -168,11 +171,6 @@ void setup() {
|
|||
}
|
||||
}
|
||||
|
||||
// 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();
|
||||
|
||||
|
||||
// Affiche l'image du vaiseau
|
||||
ship.affiche_et_mets_a_jour_le_ship(x, y);
|
||||
|
|
@ -185,7 +183,12 @@ void setup() {
|
|||
boss_start = true;
|
||||
boss_time = millis()/1000;
|
||||
}
|
||||
boss();
|
||||
//bosss();
|
||||
}
|
||||
|
||||
//Affiche le boss Classe 1
|
||||
if ( nombreEnemiReste == 0) {
|
||||
boss.affiche_et_mets_a_jour_le_boss();
|
||||
}
|
||||
|
||||
// Mise à jour du texte de l'écran :
|
||||
|
|
@ -211,9 +214,12 @@ void setup() {
|
|||
if ( nombreEnemiReste == 0 && boss_pv == 0) {
|
||||
//image(imgWin, largeur/2, hauteur/2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (boss_pv == 1){
|
||||
// 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();
|
||||
}
|
||||
|
||||
if ( nombreEnemiReste == 0 && boss_pv == 0) {
|
||||
//on load la deuxièmme vague de vaisseau
|
||||
|
|
|
|||
Loading…
Reference in New Issue