Je joue avec un clone de bomberman pour apprendre le développement de jeux.
Jusqu'à présent, j'ai fait des tuiles, des mouvements, la détection de collisions et la récupération d'objets. J'ai aussi un pseudo bombplace (juste des graphismes et des collisions, pas de vraie fonctionnalité).
J'ai fait un jsFiddle du jeu avec les fonctionnalités que j'ai actuellement. Le code dans le violon est cependant très moche. Faites défiler la carte et vous découvrirez comment je place des bombes.
Quoi qu'il en soit, ce que je voudrais faire, c'est un objet, qui a les informations générales sur les bombes comme:
function Bomb(){
this.radius = player.bombRadius;
this.placeBomb = function (){
if(player.bombs != 0){
// place bomb
}
}
this.explosion = function (){
// Explosion
}
}
Je ne sais pas vraiment comment l'adapter au code. Chaque fois que je place une bombe, dois-je le faire var bomb = new Bomb();
ou dois-je l'avoir constamment dans le script pour pouvoir y accéder.
Comment la bombe fait-elle des dégâts? Est-ce aussi simple que de faire X, Y dans toutes les directions jusqu'à ce que le rayon s'épuise ou que l'objet l'arrête? Puis-je utiliser quelque chose comme setTimeout (bomb.explosion, 3000) comme minuterie?
Toute aide est appréciée, que ce soit une simple explication de la théorie ou des exemples de code basés sur le violon. Lorsque j'ai essayé la méthode d'objet, cela casse le code.
Mise à jour: je place maintenant des bombes, et après un certain temps, supprimez-les en fonction de la position que j'ai placée. Mais si je place une bombe avant que la première bombe n'explose, elle n'en supprime qu'une seule (évidemment puisque bombX et bombY ont changé depuis que la première a été placée).
Maintenant, j'ai besoin de savoir comment résoudre ce problème, peut-être créer un nouveau tableau avec toutes les positions des bombes? Quelle est la meilleure façon de procéder?
Code actuel:
function placeBomb(){
if(placebomb && player.bombs != 0){
map[player.Y][player.X].object = 2;
bombX = player.X; bombY = player.Y;
placebomb = false;
player.bombs--;
setTimeout(explode, 3000);
}
}
function explode(){
alert('BOOM!');
delete map[bombY][bombX].object;
player.bombs++;
}