Skip to content
hichemmkhalyd edited this page Feb 13, 2015 · 25 revisions

Módulos Simuladores

Introdução

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).

Life Module

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.

Responsabilidades

  1. Tratar events que levem a danos em characters ou monsters

  2. Gerar events de retirada de character e monsters quando suas vidas atingirem o valor zero

  3. Tratar events de adição de vida (gerado na aquisição de um Powerup 1-Up)

  4. Trata situação em que um character ou monster pode ficar Invencible.

Invencible

  1. Esta característica evita danos.

  2. Esta característica dura um tempo limitado (270 turnos)

  3. Character é Invencible ao ser criado.

Components

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)

System

Events Tratados

  • 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

Events Gerados

DestroyedEvent

Quando uma entidade for destruída.

GameOverEvent

Quando uma entidade não possuir mais health ou availableTries.

Testes

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.

Bomb Module

Responsabilidades

  • 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.

Components

Components que interagem com este módulo:

  • CellPlacement

  • Explosive

    • BombRange

    • BombType

System

  • BombSystem

Events Tratados

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

Events Gerados

ExplosionStartedEvent

Bomb foi disparada

Testes

triggeredAfterTimeToExplodeTest

testa se um ExplosionStartedEvent é criado após 90 turnos.

waitTimeToExplodeTest

testa se nos primeiros 89 turnos não foi criado ExplosionStartedEvent.

Explosion Module

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.

Responsabilidades

  1. Criar Explosões em uma célula de origem a partir de ExplosionStartedEvent

  2. 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)

  3. Remover explosão

    • Explosões duram 16 turnos e são removidas do Grid.

  4. 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

Components que interagem com este módulo:

  • Explosion

    • CreatorId

    • Power

  • ExplosionBarrier

    • Type{BLOCKER, STOPPER, PASS_THROUGH}

System

Events Tratados

ExplosionStartedEvent

evento que uma Bomb foi disparada.

Events Gerados

InAnExplosionEvent

Criado para ExplosionBarrier do tipo STOPPER e PASS_THROUGH quando a explosão se propagar até suas células.

Testes

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.

Score Module

Este módulo contabiliza os pontos de um character a partir dos eventos gerados pelas ações deste.

Responsabilidades

  • Contabiliza ação: interpreta a ação realizada para poder adicionar os pontos

Components

Components que interagem com este módulo:

  • Score

    • total

System

Events Tratados

DestroyedEvent

identifica quando um moster foi destruído. Contabiliza o Score de quem provocou a destruição.

Events Gerados

Testes

addScoreDestroyedMonsterTest

Testa se quando um monster é destruído os pontos são adicionados corretamente ao Score de um determinado character.

PowerUp Module

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.

Responsabilidades

  • 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

Components que interagem com este módulo:

  • CellPlacement

  • PowerupType

    • TypeId

  • BombDropper

  • Life

  • Action

System

Eventos Tratados

DestructionEvent

Para SoftBlocks e Monsters, sorteia a criação de PowerUp.

CollisionEvent

character - powerup: Procede a aquisição

Eventos Gerados

PowerUpAquiredEvent

Evento criado quando um PowerUp é adquirido.

Testes

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.

Collision Module

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.

Responsabilidades

  1. Quando uma colisão ocorre é gerado um evento de colisão

  2. Quando um character estiver na mesma célula que uma bomb, um monster colide com a Bomb e não com o character

  3. 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 .

Components

Components que interagem com este módulo:

  • CellPlacement

System

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.

Events Tratados

(vazio)

Events Gerados

CollisionEvent

Gerado quando ocorrer colisão. Possui referência as entidades que colidiram.

Tests

horizontalCollisionDetectionTest

Testa determinação se ocorreu colisão na horizontal.

verticalCollisionDetectionTest

Testa determinação se ocorreu colisão na vertical.

ACollisionBTest

Testa se a colisão foi realizada por A e B

BCollisionATest

Testa se a colisão foi realizada por B e A

Movement Module

Este módulo trata do movimento das entidades no grid.

Responsabilidades

  • 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

Components que interagem com este módulo:

  • CellPlacement

  • ScreenPlacement

Events Tratados

MovementCommandEvent

Comando de movimento de um character ou monster.

Events Gerados

Testes

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.

PlayerControl Module

Este Módulo é responsável pelo controle de jogadores a Characters.

Responsabilidades

  • 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

Componentes

  • Player

System

Events Tratados

Events Gerados

MovementCommandEvent

Comandos de movimento da entidade.

ActionCommandEvent

Comandos de ações da entidade, como DROP_BOMB e EXPLODE_REMOTE_BOMB

Action Module

Este módulo trata as ações do usuário como segurar uma bomb e disparar uma remote bomb.

Responsabilidades

  • 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.

Events Tratados

ActionCommandEvent

Comandos de ações da entidade, como DROP_BOMB e EXPLODE_REMOTE_BOMB

Events Gerados

Testes

Kick Module

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.

Responsabilidades

Tem as condições esperadas para tratar colisões que levem a bomba a ser chutada.

Components

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).

System

Events Tratados

  • CollisionEvent

    Character - Bomb

    chuta a bomba.

Testes

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.

Block Module

Remove Soft Blocks destruídos por uma explosão e criam o evento DestroyedEvent.

Responsabilidades

  • Remove Soft Blocks destruídos.

  • Cria evento quando um Soft Block for destruído.

Components

Block

Events Tratados

InAnExplosionEvent

remove Soft Block e lança evento DestroiedEvent.

Events Gerados

DestroyedEvent

gerado quando um Soft Block é destruído.

BotControl Module

Responsabilidades

Gera Commands seguindo o algoritmo de cada Bot. Um bot pode ser um Monster ou um Character.

SimpleMoster

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

BombMosnter

  1. Anda 128 turnos.

  2. Para 32.

  3. fica invencível por 16 turnos.

  4. Gera uma explosão

  5. Para 32 turnos.

  6. Anda mais 128.

Components

  • BotType

  • CellPlacement

  • Bomb

  • Explosion

  • Powerup

System

Events Tratados

CollisionEvent

Monster - Soft Block, Hard Block, Bomb: Monster calcula nova direção.

Events Gerados

MovementCommandEvent

Comandos de movimento da entidade.

Testes

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.