-
Notifications
You must be signed in to change notification settings - Fork 3
Módulos
Especificaremos nesta seção os módulos simuladores do jogo. Cada módulo é constituído de um system e alguns components e events que o system interage (cria/atualiza).
O módulo life do jogo tem o intuito de contabilizar a quantidade de vida dos characters e monsters. O módulo recebe uma lista de eventos que são gerados por outros sistemas, e analisa-os buscando aqueles eventos que devem ser tratados por ele. Como saída, o módulo gera o evento de retirada de character ou de monster, quando a pontuação de vida atinge o valor zero.
-
Tratar events que levem a danos em characters ou monsters
-
Gerar events de retirada de character e monsters quando suas vidas atingirem o valor zero
-
Tratar events de adição de vida (gerado na aquisição de um Powerup 1-Up)
-
Trata situação em que um character ou monster pode ficar Invencible.
Invencible
-
Esta característica evita danos.
-
Esta característica dura um tempo limitado (270 turnos)
-
Character é Invencible ao ser criado.
Components que interagem com este módulo:
-
Life
-
health (número de danos que a entity pode receber sem que seja iniciada uma nova tentativa)
-
availableTries (número de tentativas)
-
-
CollisionEvent
- Monster - Character
-
Dano no character Explosion - Character, Monters: gera dano Character, Monster - Explosion: gera dano
- Bomb - Monster
-
gera dano no Monster
- Bomb - Character
-
gera dano no Character
- decrementHealthTest
-
Testa contagem de vidas: decremento
- increaseHealthTest
-
Testa contagem de vidas: incremento
- destroyifHealthZeroTest
-
Destroy se as vidas da Entidade chegaram a zero.
- recreateIfHasMoreTriesTest
-
Se um character possui mais tentativas, recria o personagem na casa inicial e com invencibilidade.
- gameOverIfHasNoMoreTriesTest
-
Se um character não possui mais health ou availableTries cria um GameOverEvent para este character.
-
Responsável pela criação das bombs no Grid.
-
Limita o número de bombs ativas (não disparadas) que podem ser deixadas por um mesmo Character no Grid, segundo o limite do Character
-
Registra um timer para a Bomb quando esta for inserida no Grid.
-
Trata eventos TimeOutEvent de bombs, dispando-as.
-
Bombs são disparadas após 90 turnos.
-
-
Trata a criação de bombs:
-
são criadas com o mesmo bombRange do seu criador (BombDropper).
-
ExplosionStartedEvents são criados criados com bombRange da Bomb que originou o evento.
-
-
Dispara bombs que estiverem no range de uma explosão (tratando o InAnExplosionEvent)
- Disparar Bomb
-
Cria um evento ExplosionStartedEvent e remove a Bomb do Grid.
-
BombSystem
- ActionCommandEvent
-
DROP_BOMB, character insere bomb (se não ultrapassou limite ainda)
- TimeOutEvent
-
Dispara a Bomb por tempo
- InAnExplosionEvent
-
Dispara a Bomb, a bomb está no range de outra bomb e devem ser disparadas por efeito cascata
- Collision Event
-
Bomb - Monster: Dispara a Bomb
Este módulo cria explosões, as propaga no grid e remove explosões extintas (depois de um determinado número de turnos que foram criadas).
Um Event é criado quando uma Entity é atingida por uma explosão.
-
Criar Explosões em uma célula de origem a partir de ExplosionStartedEvent
-
Propagar explosões:
-
Explosão na célula de origem se propagam nas 4 direções (esquerda, direita, cima e baixo)
-
Explosões que não são origem se propagam na mesa direção de sua propagação original (vertical ou horizontal)
-
Explosões demoram 3 (EXPLOSION_PROPAGATION) turnos para se propagar de uma célula a outra adjacente.
-
Explosões iniciam com firepower que diminui a cada propagação
-
Explosões com firepower 1 não se propagam.
-
Tratar Explosion Blockers - Explosões não se propagam até:
-
Hard blocks
-
Fora do limite do cenário
-
Passagens (pontes e escadas)
-
-
Tratar Explosion Stopers - Explosões não continuam após:
-
Soft blocks
-
Powerups
-
Bombs (no entando a Bomb é disparada e é iniciada uma nova explosão)
-
-
-
Remover explosão
-
Explosões duram 16 turnos e são removidas do Grid.
-
-
Detectar entidades no range de uma explosão: É criado um evento quando uma entidade está em uma célula em que uma explosão está presente.
Components que interagem com este módulo:
-
Explosion
-
CreatorId
-
Power
-
-
ExplosionBarrier
-
Type{BLOCKER, STOPPER, PASS_THROUGH}
-
- explosionCreationTest
-
Testa se Explosion é criada a partir de um ExplosionStartedEvent
- explosionInitialPropagationTest
-
Testa se Explosion inicial é propagada nas 4 direções (esquerda, direita, cima e baixo)
- explosionVerticalPropagationTest
-
Testa se Explosion não inicial é propagada na direção vertical ( cima ou baixo)
- explosionHorizontalPropagationTest
-
Testa se Explosion não inicial é propagada na direção vertical (esquerda ou direita)
- explosionDurationTest
-
Testa se uma Explosion é mantida em até 16 turnos.
- explosionRemoveTest
-
Testa se uma Explosion foi removida apóes 17 turnos de sua criação.
- explosionExtendedTest
-
Testa se uma Explosion iniciada com um range de 5 celulas atinge esse range.
- explosionBlockTest
-
Testa se um Hard Block bloqueia a propagação de uma explosão.
- explosionStopTest
-
Testa se um Soft Block para a propagação de uma explosão.
- softBlockInAnExplosionEventTest
-
Testa se é criado um evento InAnExplosionEvent para um um Soft Block no range de uma explosão.
Este módulo contabiliza os pontos de um character a partir dos eventos gerados pelas ações deste.
- DestroyedEvent
-
identifica quando um moster foi destruído. Contabiliza o Score de quem provocou a destruição.
No jogo Bomberman characters podem adquirir itens que modificam suas habilidades. É responsabilidade deste módulo gerenciar a criação de powerups no grid e a aquisição destes por characters. A aquisição de um PowerUp é realizada quando um character se move para uma célula onde um PowerUp se encontra. Quando um character adquire o powerup este é removido do grid.
-
Criação de powerups no grid
-
Aquisição de powerups por characters
-
Os powerups a serem implementados são: SPEED_UP, BOMB_UP, BOMB_RANGE_UP, LIFE_UP, REMOTE_CONTROL.
-
SPEED_UP: aumenta a velocidade em 1/8 por turno com a aquisição deste powerup.
-
Components que interagem com este módulo:
-
CellPlacement
-
PowerupType
-
TypeId
-
-
BombDropper
-
Life
-
Action
- DestructionEvent
-
Para SoftBlocks e Monsters, sorteia a criação de PowerUp.
- CollisionEvent
-
character - powerup: Procede a aquisição
- createPowerUpTest
-
Testa criação de powerups no Grid.
- aquirePowerUpTest
-
Testa se a aquisição de um powerups está sendo identificada e realizada
- aquiredPowerUpIsRemovedTest
-
Testa se após aquisição powerups é removido
- speedUpAquireTest
-
Testa se a velocidade é aumentada após a aquisição do Speed Up.
- bomberUpAquireTest
-
Testa se o BombLimit é aumentada após a aquisição do Bomb Up.
- bombRangeUpAquireTest
-
Testa se o bombRange é aumentada após a aquisição do Bomb Range Up.
- lifeUpAquireTest
-
Testa se o número de Lifes é aumentada após a aquisição do Life Up.
- RemoteControlAquireTest
-
Testa se o character é munido de RemoteControl após a aquisição do RemoteControl.
Uma entidade colide com outra quando ela tenta se mover para a célula onde uma outra se encontra. Uma Colisão possui uma orientação, ou seja A - Colide - B não é o mesmo que B - Colide - A.
-
Quando uma colisão ocorre é gerado um evento de colisão
-
Quando um character estiver na mesma célula que uma bomb, um monster colide com a Bomb e não com o character
-
Quando um character estiver na mesma célula que um soft block, um monster ou explosion colidem com osoft block não com o character .
Para a implementação do Módulo de Colisão, será criada uma classe chamada CollisionSystem. Essa classe receberá a informação do grid da posição dos elementos em um determinado turno e retornará uma lista com eventos de colisão.
Este módulo trata do movimento das entidades no grid.
-
Mover entidades atualizando o ScreenPlacement e o CellPlacement
-
characters se movimentam por default a 1/8 c/t (células por turno)
-
monsters movimentam por default a 1/16 c/t (células por turno)
-
Components que interagem com este módulo:
-
CellPlacement
-
ScreenPlacement
- walkVerticalLineTest
-
Testa se a posição da célula dda entidade é atualizada em um movimento por toda a vertical
- walkHorizontalLineTest
-
Testa se a posição da célula da entidade é atualizada em um movimento por toda a horizontal
- speedTest
-
Testa se demora o número correto de turnos para percorrer uma célula.
Este Módulo é responsável pelo controle de jogadores a Characters.
-
Mapear character e player
-
Mapear player e um InputProvider. InputProvider’s podem ser:
-
KeyboardInput
-
JoystickInput
-
NetworkInput
-
-
Mapear teclas e ações
-
Para cada turno ler as teclas precionadas e gerar Command*Event. Os Command*Event podem ser:
-
ActionCommandEvent
-
MovementCommandEvent
-
Este módulo trata as ações do usuário como segurar uma bomb e disparar uma remote bomb.
-
Disparar remote bomb: dispara a remote bomb mais antiga que um character possuir no grid.
-
Segura bomb: character segura uma bomb que para de contar o tempo até ser lançada
-
Lança bomb segurada: character lança uma bomb que está segurando. Esta bomb começa um movimento característico.
- ActionCommandEvent
-
Comandos de ações da entidade, como DROP_BOMB e EXPLODE_REMOTE_BOMB
O módulo Kick é responsável por, uma vez que haja uma colisão, verificar se a mesma tem as condições esperadas para desencadear o ato de chutar uma bomba. Se as condições esperadas foram encontradas, então são chamados alguns métodos que geram o evento de chutar a bomba.
Components que interagem com este módulo:
-
PowerUpInventory
-
PowerType(tipos de PowerUps disponíveis no jogo)
-
*Movable
**Direction(usado neste módulo para saber a direção a qual a bomba está sendo chutada).
*Velocity(componente incluído na bomba para dar movimento).
- testCheckIfCanKickBombs
-
Testa se quando um personagem em condições de chutar bombas colide com a bomba, se a posição da bomba está sofrendo variações.
- testCheckIfCanNotKickBombs
-
Testa se quando um personagem em que não está em condições de chutar bombas colide com a bomba, se a posição da bomba se mantem a mesma.
- testBombDirection
-
Testa quando a bomba é chutada com uma determinada direção, se a velocidade é imposta no eixo correto.
Remove Soft Blocks destruídos por uma explosão e criam o evento DestroyedEvent.
Gera Commands seguindo o algoritmo de cada Bot. Um bot pode ser um Monster ou um Character.
Andam com velocidade de 1/16 c/t Continua o movimento na mesma direção sempre que possível Ao colidir com algo sorteia a próxima posição
- CollisionEvent
-
Monster - Soft Block, Hard Block, Bomb: Monster calcula nova direção.
Throw Module
O módulo Throw tem por principal funcionalidade tratar do evento de lançamento de uma bomba. Quando o character pega o power up de lançamento de bombas, ele adquire a habilidade de lançar bombas por sobre hard blocks, soft blocks ou qualquer outra entity num determinado raio. === Responsabilidades * Lançar bombas na direção em que o character está olhando. * Cuidar para que a bomba não seja lançada sobre outra entidade. === Components * CellPlacement * Bomb * PowerupType ** TypeId * Timer === System ==== Events Tratados BallisticMovementCompleted:: Realiza o evento de lançamento da bomba propriamente dito. ==== Eventos Gerados === Testes throwBombTest:: Testa se a bomba foi lançada com sucesso.