Création mini-rpg type bomberman
Bonjour,
Dans le cadre d'un projet personnel j'ai voulu réaliser un mini-rpg de type bomberman. J'ai finalement parvenu à un résultat plutôt convaincant cependant il me reste un problème à résoudre.
Je vous expose la situation : il y a une map crée dans un canvas grâce à un tileset, 2 personnages chargé à l'aide de sprites. Le but du jeu est pour chaque joueur de tué l'autre joueur en posant des bombes qui au bout d'un certain temps explosent, ces bombes font des dégâts à l'endroit ou elles sont posées ainsi qu'à ces coordonnées adjacentes.
Le problème que j'ai est le suivant : lorsque je met une bombe côte à côte d'une autre bombe déjà posée j'aimerais que la 2ème bombe que je pose explose en même temps que la première.
Je sais qu'il faut que j'utilise les coordonnées adjacentes des bombes ainsi que tu "timer" que j'ai donné aux bombes. En théorie je sais comment décrire ce que je dois faire mais en pratique j'ai du mal.
Donc pour résumé il faudrait qu'à chaque fois que je pose une bombe je regarde s'il n'y en a pas une à ces coordonnées adjacentes, si cette condition est vraie et qu'il y a une bombe a côté il faudrait que le "timer" de cette bombe devienne égal à celle d'à côté, si la condition est fausse je lui attribut le "timer" de base que je donne aux bombes.
Pour plus de détail je vous met ci-dessous la partie de mon code qui je pense doit être modifiée
Merci d'avance :D,
Jonathan
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| function Bombe(url, urlexplo, joueur, direction) {
this.joueur1;
this.joueur2;
this.x= joueur.x;
this.y= joueur.y;
this.image = new Image();
this.image.referenceDuPerso = this;
this.etatAnimation=-1;
this.image.onload = function() {
if(!this.complete)
throw "Erreur de chargement du sprite nommé \"" + url + "\".";
}
this.image.src = "sprites/" + url;
this.timerBombe=60; // TIMER AVANT EXPLOSION
this.imageexplo = new Image();
this.imageexplo.referenceDuPerso = this;
this.imageexplo.onload = function() {
if(!this.complete)
throw "Erreur de chargement du sprite nommé \"" + urlexplo + "\".";
}
this.imageexplo.src = "sprites/" + urlexplo;
}
Bombe.prototype.dessinerBombe = function (context,personnages,personnages2){
this.joueur1=personnages;
this.joueur2=personnages2;
var prochaineCase = this.getCoordonneesAdjacentes();
var prochaineCase1 = this.getCoordonneesAdjacentes();
var prochaineCase2 = this.getCoordonneesAdjacentes2();
var coord = {'x' : this.x, 'y' : this.y};
switch(this.etatAnimation){
case -1:
context.drawImage(this.image,this.x*32,this.y*32);
map.terrain[this.y][this.x]=99; // MODIFICATION DE LA TILES DE LA BOMBE POUR EMPECHER LE JOUEUR DE REMARCHE DESSUS
if (this.timerBombe>0){
this.timerBombe--;
}else{
this.etatAnimation=0;
this.timerBombe=0.1; // L'IMAGE DE L'EXPLOSION A EU UN TEMPS REDUIT SINON LE JOUEUR DEVAIT TROP ATTENDRE AVANT DE POUVOIR AVANCER
}
break;
case 0:
context.drawImage(this.imageexplo,this.x*30,this.y*30);
/*console.log(map.terrain[this.y][this.x]);*/
if(map.terrain[this.y][this.x]==99 ) { // ON MET LE TILES DU CRATERE QUAND CA EXPLOSE
map.terrain[this.y][this.x]=5;
}
if (this.timerBombe>0){
this.timerBombe--;
}else{
this.etatAnimation=2;
}
break;
}
} |