classDiagram
direction TB
class App {
+main(args: String[])$
}
class GameConfig {
+TILE_SIZE: int$
+COLUNAS: int$
+LINHAS: int$
+LARGURA_TELA: int$
+ALTURA_TELA: int$
+FPS: int$
+VELOCIDADE_JOGADOR: int$
+LARGURA_PROJETIL: int$
+ALTURA_PROJETIL: int$
+VELOCIDADE_PROJETIL: int$
+LARGURA_NAVE: int$
+ALTURA_NAVE: int$
+LARGURA_ALIEN: int$
+ALTURA_ALIEN: int$
}
class CorEVidaAliens {
<<enum>>
BRANCO
AMARELO
AZUL
ROSA
-nivel: int
-pontosDeVida: int
-nomeSprite: String
+getNivel(): int
+getPontosDeVida(): int
+getNomeSprite(): String
+calcularPontos(): int
}
class Renderable {
<<interface>>
+renderizar(g: Graphics)
}
class Entidade {
<<abstract>>
#x: int
#y: int
#largura: int
#altura: int
+Entidade(x: int, y: int, largura: int, altura: int)
+getX(): int
+getY(): int
+getLargura(): int
+getAltura(): int
+setX(x: int)
+setY(y: int)
+setLargura(largura: int)
+setAltura(altura: int)
+mover(deltaX: int, deltaY: int)
+colideCom(outra: Entidade): boolean
+processarColisaoProjetilAlien(projeteis: List~Projetil~, aliens: List~Alien~): int$
+verificarColisaoJogadorAlien(jogador: Jogador, aliens: List~Alien~): boolean$
+renderizar(g: Graphics)*
}
class Alien {
-tipo: CorEVidaAliens
-vidaAtual: int
-sprite: Image
-vivo: boolean
+Alien(x: int, y: int, largura: int, altura: int, tipo: CorEVidaAliens, sprite: Image)
+renderizar(g: Graphics)
+receberDano(dano: int)
+estaVivo(): boolean
+calcularPontos(): int
+getTipo(): CorEVidaAliens
+getNivel(): int
+getVidaAtual(): int
+getVidaMaxima(): int
+setVidaAtual(vida: int)
+setVivo(vivo: boolean)
}
class Jogador {
-velocidade: int
-sprite: Image
-limiteMinX: int
-limiteMaxX: int
-playerId: int
-projeteis: List~Projetil~
+Jogador(xInicial: int, yInicial: int, largura: int, altura: int, velocidade: int, sprite: Image, limiteMinX: int, limiteMaxX: int, playerId: int)
+renderizar(g: Graphics)
+moverEsquerda()
+moverDireita()
+atirar(larguraProjetil: int, alturaProjetil: int, velocidadeProjetil: int)
+atualizarProjeteis(alturaTela: int)
+getProjeteis(): List~Projetil~
~getProjeiteisParaColisao(): List~Projetil~
+getPlayerId(): int
}
class Projetil {
-velocityY: int
-usado: boolean
-playerId: int
+Projetil(x: int, y: int, largura: int, altura: int, velocityY: int, playerId: int)
+renderizar(g: Graphics)
+mover()
+isOffScreen(heightLimit: int): boolean
+marcarComoUsado()
+isUsado(): boolean
+getPlayerId(): int
+setUsado(usado: boolean)
}
class EntidadeManager {
<<abstract>>
#entidades: List~T~
#larguraTela: int
#alturaTela: int
+EntidadeManager(larguraTela: int, alturaTela: int)
+adicionarEntidade(entidade: T)
+limpar()
+contarEntidades(filtro: Predicate~T~): long
+renderizar(g: Graphics)
#getEntidadesInternas(): List~T~
+atualizar(): boolean*
}
class GerenciadorDeAliens {
-velocidadeX: int
+GerenciadorDeAliens(larguraTela: int, alturaTela: int)
+adicionarAlien(alien: Alien)
+atualizar(): boolean
+atualizar(posicaoYJogadores: int): boolean
+moverAliens(posicaoYJogadores: int): boolean
+verificarColisoes(projeteis: List~Projetil~): int
+todosMortos(): boolean
+getVelocidadeX(): int
+setVelocidadeX(velocidade: int)
+getQuantidadeAliensVivos(): int
}
class GerenciadorDeFases {
-tileSize: int
-alienImagens: Map~CorEVidaAliens, Image~
-random: Random
-faseAtual: int
+GerenciadorDeFases(tileSize: int, alienImagens: Map~CorEVidaAliens, Image~)
+criarAliensParaFase(): List~Alien~
-escolherArranjoParaFase(): String
-carregarArranjoDoArquivo(nomeArquivo: String): List~Alien~
-obterTipoAlienPorChar(c: char): CorEVidaAliens
-criarArranjoSimples(): List~Alien~
+proximaFase()
+getFaseAtual(): int
}
class GameLauncher {
+iniciarJogo(args: String[])
-processarArgumentos(args: String[]): boolean
-criarEConfigurarJanela(modoCoop: boolean)
-configurarJanela(janela: JFrame)
-finalizarConfiguracao(janela: JFrame, motor: MotorDoJogo)
}
class MotorDoJogo {
-jogador1: Jogador
-jogador2: Jogador
-gerenciador: GerenciadorDeAliens
-gerenciadorFases: GerenciadorDeFases
-loop: Timer
-modoCoop: boolean
-pontuacao: int
-gameOver: boolean
-pausado: boolean
-imagensCarregadas: Map~String, Image~
-alienImagens: Map~CorEVidaAliens, Image~
+MotorDoJogo(coop: boolean)
-carregarImagens()
-carregarImagem(nome: String): Image
+getImagemNave1(): Image
+getImagemNave2(): Image
+getAlienImagens(): Map~CorEVidaAliens, Image~
+adicionarPontos(pontos: int)
+terminarJogo()
+getPontuacao(): int
+setPontuacao(pontuacao: int)
+isGameOver(): boolean
+isPausado(): boolean
+isJogando(): boolean
+processarInput(keyCode: int)
-adicionarAliensNaFase()
+paintComponent(g: Graphics)
+actionPerformed(e: ActionEvent)
+keyReleased(e: KeyEvent)
}
Renderable <|.. Entidade
Renderable <|.. EntidadeManager
Entidade <|-- Alien
Entidade <|-- Jogador
Entidade <|-- Projetil
EntidadeManager <|-- GerenciadorDeAliens
Jogador *-- "0..*" Projetil
GerenciadorDeAliens o-- "0..*" Alien
MotorDoJogo *-- "1" Jogador : jogador1
MotorDoJogo *-- "0..1" Jogador : jogador2
MotorDoJogo *-- "1" GerenciadorDeAliens
MotorDoJogo *-- "1" GerenciadorDeFases
Alien *-- "1" CorEVidaAliens
App ..> GameLauncher
GameLauncher ..> MotorDoJogo
GerenciadorDeFases ..> Alien
MotorDoJogo ..> GameConfig
Entidade ..> Projetil
Entidade ..> Alien
Entidade ..> Jogador
GerenciadorDeAliens ..> Projetil