Estou brincando com um clone bomberman para aprender o desenvolvimento de jogos.
Até agora eu fiz peças, movimento, detecção de colisão e coleta de itens. Eu também tenho pseudo-bombplacing (apenas gráficos e colisão, nenhuma funcionalidade real).
Eu fiz um jsFiddle do jogo com a funcionalidade que tenho atualmente. O código no violino é muito feio. Percorra o mapa e você descobrirá como eu coloco bombas.
Enfim, o que eu gostaria de fazer é um objeto que tenha informações gerais sobre bombas como:
function Bomb(){
this.radius = player.bombRadius;
this.placeBomb = function (){
if(player.bombs != 0){
// place bomb
}
}
this.explosion = function (){
// Explosion
}
}
Eu realmente não sei como encaixá-lo no código. Toda vez que coloco uma bomba, faço var bomb = new Bomb();
ou preciso constantemente tê-la no script para poder acessá-la.
Como a bomba causa dano? É tão simples quanto fazer X, Y em todas as direções até o raio acabar ou o objeto parar? Posso usar algo como setTimeout (bomb.explosion, 3000) como timer?
Qualquer ajuda é apreciada, seja uma explicação simples da teoria ou exemplos de código baseados no violino. Quando tentei a maneira como o objeto quebra o código.
Atualização: Agora coloco bombas e, após um certo período de tempo, apago-as, dependendo da posição em que as coloquei. Mas se eu colocar uma bomba antes que a primeira bomba exploda, ela excluirá apenas uma delas (obviamente, desde que a bombaX e a bombaY mudaram desde que a primeira foi colocada).
Agora eu preciso saber como corrigir esse problema, talvez criar uma nova matriz com todas as posições da bomba? Qual é a melhor maneira de fazer isso?
Código atual:
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++;
}