How evfbarros/projeto-jogo-code-arena works
1. Visão geral
- O repositório implementa um RPG por turnos em terminal em Java, com progressão por campanha e batalhas mediadas por perguntas.
- A arquitetura é separada em três camadas principais: telas de interação, lógica de jogo/quiz e modelo de domínio.
2. Ponto de entrada e fluxo principal
- src/main/Main.java inicia a aplicação e aciona o fluxo do jogo.
- O jogador percorre um ciclo de telas: Menu → Seleção de personagem → Mapa/campanha → Batalha → Pergunta → Resultado/atributos.
- Esse fluxo é orientado por estado, com cada tela responsável por uma etapa da experiência no terminal.
3. Camada de telas (src/screens)
- As classes MenuScreen, CharacterSelectionScreen, GameScreen, BattleScreen, QuestionScreen e AttributeScreen representam a interface textual.
- Elas não concentram regras de combate ou quiz; atuam como orquestradoras da interação, coletando entrada do usuário e repassando decisões para a lógica central.
- BattleScreen e QuestionScreen são pontos importantes de transição entre combate e avaliação por perguntas.
4. Orquestração do jogo (src/logic/game)
- GameManager parece ser o núcleo do estado da partida: personagem atual, combate, progresso e transições.
- CampaignManager controla a campanha linear pelas ilhas, provavelmente definindo a sequência de fases, inimigos e marcos da história.
- Stats concentra os atributos e evolução do personagem, apoiando o sistema de XP/nível descrito no README.
5. Mundo e progressão geográfica (src/world)
- Island e IslandCreator modelam as ilhas da East Blue e a estrutura da rota da campanha.
- Esse subsistema separa a progressão narrativa/geográfica da lógica de combate, permitindo que cada ilha carregue dificuldade, inimigos e eventos próprios.
6. Sistema de quiz (src/logic/quiz)
- O quiz é um subsistema independente, com abstração base Question e variações como MultipleChoiceQuestion, TrueFalseQuestion e OpenQuestion.
- Difficulty define a escala de desafio associada às fases/ilhas.
- QuestionBank armazena ou agrupa questões; QuestionManager provavelmente seleciona e entrega perguntas para as batalhas.
7. Carregamento externo de perguntas
- GoogleSheetsQuestionLoader é a ponte com o conteúdo externo, carregando perguntas a partir de Google Sheets publicado em CSV.
- Isso cria uma dependência de infraestrutura: o jogo funciona no terminal, mas depende de acesso à internet para atualizar/carregar o banco de questões.
8. Modelo de domínio: personagens, inimigos e ações (src/entities)
- Character é a base para Player, Enemy, NPC e CrewMember, indicando herança para tipos de entidade no jogo.
- GameObject sugere uma abstração comum para elementos do mundo.
- Attack representa ações ofensivas, enquanto CharacterCreator provavelmente centraliza a criação/configuração de personagens e seus atributos.
9. Habilidades especiais (src/entities/ability)
- O pacote de habilidades usa uma abstração comum (CombatAbility, SpecialAbility) e implementações específicas por personagem/inimigo: Luffy, Zoro, Nami, Usopp, Sanji, Buggy, Arlong etc.
- Isso funciona como uma variação de Strategy/Polymorphism, permitindo que cada personagem tenha comportamento único sem espalhar regras especiais pelo restante do código.
- DefaultCombatAbility funciona como comportamento padrão quando não há habilidade especial ativa.
10. Combate e regras de exceção
- O combate inclui limitações explícitas de uso de ações defensivas e especiais, refletidas nas exceções customizadas:
- AtaqueIndisponivelException
- AtaqueInvalidoException
- DefesaIndisponivelException
- DesvioIndisponivelException
- Essas exceções indicam que o jogo valida estados de turno, recursos e permissões de ação antes de aplicar efeitos.
11. Dependências entre subsistemas
- As telas dependem da lógica de jogo para executar ações.
- A lógica de jogo consome o modelo de domínio (entities, world) e o quiz para resolver batalhas.
- O quiz fornece a mecânica de decisão que impacta diretamente o combate e a progressão.
- O resultado é um fluxo bem desacoplado entre interface, regras e dados.
12. Tecnologia e restrições arquiteturais
- A aplicação é em Java 11+ e usa terminal como interface, sem camada gráfica.
- Como o conteúdo de perguntas vem de uma fonte externa e o jogo é guiado por estados de tela, a arquitetura é essencialmente um jogo single-player local com serviços externos leves para conteúdo.
Main entry points: GameManager.java Game Manager · GameScreen.java Game Screen · Character.java Character · BattleScreen.java Battle Screen
Components 23
Entry & UI
Terminal entry point and screen flow.
- Main · Starts the terminal game and hands off to the first screen.
src/main/Main.java - Menu · Initial terminal menu and top-level navigation.
src/screens/MenuScreen.java - Character Select · Chooses the playable character before the campaign starts.
src/screens/CharacterSelectionScreen.java - Game Screen · Coordinates the campaign flow between map, battles, and results.
src/screens/GameScreen.java - Battle Screen · Runs combat turns and transitions into quiz-driven resolution.
src/screens/BattleScreen.java - Question Screen · Presents quiz questions and collects answers during battle.
src/screens/QuestionScreen.java - Attributes · Shows stat changes and post-combat feedback.
src/screens/AttributeScreen.java
Game Logic
State, campaign, and progression orchestration.
- Game Manager · Central runtime state for the current match and transitions.
src/logic/game/GameManager.java - Campaign Manager · Controls the linear island campaign and its milestones.
src/logic/game/CampaignManager.java - Stats · Stores character attributes, level, and growth state.
src/logic/game/Stats.java
Domain & Content
Characters, combat abilities, world, and quiz content.
- Character · Common base for players, enemies, NPCs, and crew members.
src/entities/Character.java - Player · Playable character state and behavior.
src/entities/Player.java - Enemy · Hostile combatant used in encounters.
src/entities/Enemy.java - Attack · Represents an offensive action in combat.
src/entities/Attack.java - Combat Ability · Shared interface for combat and special ability behavior.
src/entities/ability/CombatAbility.java - Default Ability · Fallback combat behavior when no special ability applies.
src/entities/ability/DefaultCombatAbility.java - Special Abilities · Character- and enemy-specific ability variants.
- Island World · Island-based campaign geography and routing.
src/world/Island.java - Island Creator · Builds the island progression for the campaign.
src/world/IslandCreator.java - Question · Abstract base for quiz questions.
src/logic/quiz/Question.java - Question Manager · Selects and serves questions for battles.
src/logic/quiz/QuestionManager.java - Question Bank · Holds or groups available quiz questions.
src/logic/quiz/QuestionBank.java - Sheets Loader · Loads quiz content from published Google Sheets CSV.
src/logic/quiz/GoogleSheetsQuestionLoader.java
Connections 24
- Main → Menu: starts · Application bootstraps into the menu.
- Menu → Character Select: new game · Menu advances to character selection.
- Character Select → Game Screen: begin · Chosen character enters the campaign flow.
- Game Screen → Battle Screen: encounter · Campaign flow enters combat scenes.
- Battle Screen → Question Screen: quiz step · Combat resolution depends on answering questions.
- Question Screen → Attributes: resolve · Results update or display attribute changes.
- Attributes → Game Screen: continue · Returns to the main game flow after feedback.
- Game Screen → Game Manager: drives · Screens delegate state transitions to the game manager.
- Battle Screen → Game Manager: uses · Battle actions are coordinated by runtime state.
- Game Manager → Campaign Manager: orchestrates · Campaign progression is managed as a separate flow.
- Game Manager → Stats: updates · Match state updates character attributes and growth.
- Game Manager → Player: tracks · Current playable entity is stored in game state.
- Campaign Manager → Island World: navigates · Campaign advances across islands.
- Island World → Island Creator: built by · Island progression is assembled by a creator/factory.
- Player → Character: inherits · Playable character extends the shared character base.
- Enemy → Character: inherits · Enemies reuse the shared character base.
- Character → Attack: uses · Characters perform attacks as combat actions.
- Character → Combat Ability: equipped with · Characters can delegate combat behavior to abilities.
- Combat Ability → Default Ability: fallback · Default behavior covers missing special cases.
- Combat Ability → Special Abilities: specializes · Specific abilities implement character- or enemy-specific logic.
- Question Manager → Question Bank: serves from · Questions are selected from the bank.
- Question Manager → Question: instantiates · Manager works with the abstract question model and variants.
- Sheets Loader → Question Bank: loads · External CSV content populates the question bank.
- Question Screen → Question Manager: requests · Screen asks the manager for the next question.