Este é um jogo de tiro espacial (shoot 'em up) desenvolvido em Java para disciplina ACH2003 - Computação Orientada a Objetos (2025) na EACH-USP, onde o jogador controla uma nave espacial e deve enfrentar inimigos, bosses e coletar powerups através de múltiplas fases. O projeto utiliza uma arquitetura modular com sistema de configuração baseado em arquivos de texto.
game/
├── Config/ # Arquivos de configuração (.txt, alteráveis)
│ ├── gameConfig.txt # Configurações gerais do jogo
│ ├── phaseConfig.txt # Configuração de fases
│ └── levels/ # Arquivos de eventos por fase
│ ├── fase1.txt
│ └── fase2.txt
├── Engine/
│ ├── gameEngine.java # Loop principal do jogo; Classe central
│ ├── GameLib.java # Biblioteca gráfica
│ ├── SceneRenderer.java # Renderização da cena
│ ├── BackGround.java # Fundo animado
│ └── ConfigReaders/ # Leitura de arquivos txt de configs
│ ├── GameConfig.java
│ └── PhaseConfig.java
├── GameElements/ # Pacote de elementos do jogo
│ ├── Entity.java # Classe base para entidades
│ ├── GameElement.java # Classe base para elementos
│ ├── LifeBar.java # Barra de vida
│ ├── Star.java # Estrelas de fundo
│ └── Entities/ # Entidades = elementos que interagem
│ ├── Player.java # Jogador
│ ├── Enemy.java # Classe base para inimigos
│ ├── Projectile.java # Classe base para projéteis
│ ├── Powerup.java # Classe base para powerups
│ ├── EnemyModels/ # Tipos de inimigos (classes próprias)
│ │ ├── Enemy1.java # Inimigo simples
│ │ ├── Enemy2.java # Cobrinha
│ │ ├── Boss.java # Classe base para bosses
│ │ └── Bosses/ # Tipos de boss (classes próprias)
│ │ ├── Boss1.java
│ │ └── Boss2.java
│ ├── PowerUps/ # Tipos de powerups
│ │ ├── Powerup1.java # Velocidade
│ │ └── Powerup2.java # Escudo
│ └── ProjectileModels/ # Tipos de projéteis (interagem de modo diferente)
│ ├── ProjectilePlayer.java
│ └── ProjectileEnemy.java
├── Manager/ # Gerenciadores
│ ├── EntityManager.java # Controle de Atualizações e Colisões
│ ├── SpawnManager.java # Controle de spawn de entidades
│ └── EntityState.java # Estados das entidades
├── Exceptions/ # Exceções customizadas
│ ├── HpExcption.java
│ └── SpawExcption.java
└── Main.java # Ponto de entrada
- Responsabilidade: Loop principal do jogo
- Funcionalidades:
- Inicialização do jogo
- Controle de tempo (delta time)
- Coordenação entre Managers
- Loop de atualização e renderização
- Responsabilidade: Interface gráfica e entrada do usuário (já fornecida)
- Funcionalidades:
- Inicialização da janela gráfica
- Processamento de entrada do teclado
- Métodos de desenho primitivos
- Responsabilidade: Renderização de todos os elementos visuais
- Funcionalidades:
- Desenho do fundo
- Renderização de entidades
- Efeitos visuais (explosões, powerups)
- Responsabilidade: Leitura das configurações gerais
- Arquivo lido:
Config/gameConfig.txt - Configurações:
- Parâmetros de entidades (vida, velocidade, raio)
- Cores dos elementos
- Configurações específicas de cada tipo de entidade
- Procura por "keys" do tipo
player.shootingSpeed=100
- Responsabilidade: Leitura e definição de fases e eventos
- Arquivos lidos:
Config/phaseConfig.txt: Configuração geral das fasesConfig/levels/fase*.txt: Eventos (de spawn) específicos de cada fase
- Funcionalidades:
- Carregamento de eventos de spawn
- Controle de transição entre fases
- Leitura de modo cronológico, de linha a linha, para cada evento
- Ignora comentários (linhas começando com #)
- Responsabilidade: Gerenciamento de entidades e colisões
- Funcionalidades:
- Detecção de colisões entre entidades
- Atualização de movimento e estados das entidades
- Limpeza de entidades inativas
- Processamento de dano
- Responsabilidade: Controle de spawn de entidades
- Funcionalidades:
- Spawn baseado em tempo (eventos lidos dos .txt)
- Controle de fases
- Gerenciamento de bosses
- Método de controle especial para Enemy2 (cobrinha)
- Setas direcionais: Movimentação do jogador
- Ctrl: Disparo de projéteis
- ESC: Sair do jogo
- Jogador possui HP configurável (phaseConfig.txt)
- Inimigos e bosses têm HP específicos (GameConfig.txt)
- Sistema de invulnerabilidade temporária após dano
- Movimento apenas vertical
- Dispara projéteis simples
- Múltiplos segmentos (estruturas de corpo idependentes)
- Movimento dos segmentos em fila, de "cobra"
- Dispara vários projéteis (nmro dependente da qntd de segmentos) em leque
- Características: Boss tipo "Player", pode entrar em estado invulnerável (escudo)
- Ataques:
- Tiro normal
- Ataque especial com projéteis grandes
- Mecânica: Alterna entre modo normal e super ataque
- Características: Boss "Cubo doido"
- Ataques:
- Múltiplos projéteis simultâneos (em leque)
- Movimento vertical agressivo
- Mecânica: Muda de posição durante ataques
- Efeito: Aumenta velocidade do jogador
- Duração: 3 segundos (padrão)
- Visual: Gradiente verde-amarelo
- Efeito: Reduz velocidade dos inimigos
- Duração: 10 segundos (padrão)
- Visual: Gradiente amarelo-magenta
Cada arquivo de fase (fase*.txt) contém eventos cronológicos:
# Comentários são ignorados
INIMIGO <TIPO> <QUANDO> <X> <Y>
POWERUP <TIPO> <QUANDO> <X> <Y>
CHEFE <TIPO> <HP> <QUANDO> <X> <Y>
# Fase 1
INIMIGO 2 1500 120 50 # Enemy2 no tempo 1500ms
INIMIGO 1 2500 180 50 # Enemy1 no tempo 2500ms
POWERUP 1 3000 160 50 # Powerup1 no tempo 3000ms
CHEFE 1 10 8000 200 50 # Boss1 com 10 HP no tempo 8000ms
- Player ↔ Inimigos: Dano ao jogador e inimigo
- Player ↔ Projéteis Inimigos: Dano ao jogador
- Projéteis Player ↔ Inimigos: Dano ao inimigo
- Player ↔ Boss: Dano ao jogador
- Projéteis Player ↔ Boss: Dano ao boss
- Player ↔ Powerups: Ativação do powerup
- Baseada em distância euclidiana
- Considera raios das entidades
- Fator de tolerância aplicado (0.8)
Contém todas as configurações numéricas do jogo:
- Velocidades, raios, tempos
- Cores dos elementos
- Parâmetros específicos de cada entidade
Para modificar o jogo, edite:
gameConfig.txtpara ajustar parâmetrosphaseConfig.txtpara alterar número de fasesfase*.txtpara criar novos padrões de inimigos
- Java JDK 8 ou superior
javac -cp . game/*.java game/*/*.java game/*/*/*.javajava game.Main- Novo Inimigo: Estender
Enemye adicionar aoSpawnManager - Novo Boss: Estender
Bosse implementar lógica específica - Novo Powerup: Estender
Powerupe definir efeitos - Nova Fase: Criar arquivo de fase e atualizar
phaseConfig.txt
- Alterar parâmetros em
gameConfig.txt - Modificar lógica de colisão em
EntityManager - Ajustar padrões de spawn em
SpawnManager
Este projeto demonstra uma arquitetura bem estruturada para jogos 2D em Java, com:
- Separação clara de responsabilidades
- Sistema de configuração flexível
- Gerenciamento eficiente de entidades
- Código extensível e manutenível
O sistema permite fácil modificação e adição de novos elementos, mantendo a organização e performance do jogo.





