Este projeto tem como objetivo simular um cenário futurista em que, devido à escassez de recursos naturais na Terra, a humanidade precisa explorar outros planetas em busca de sobrevivência.
A aplicação envolve a modelagem de recursos, planetas e naves exploradoras, permitindo simulações de exploração interplanetária com restrições de combustível e coleta de recursos.
Cada recurso possui valor e peso, ambos imutáveis após a criação.
- Água → valor:
180, peso:10 - Oxigênio → valor:
300, peso:2 - Silício → valor:
60, peso:16 - Ouro → valor:
120, peso:25 - Ferro → valor:
30, peso:32
-
Cada planeta possui uma posição (int) e uma lista de recursos (imutáveis).
-
É possível calcular:
- Valor total: soma dos valores de todos os recursos.
- Valor por peso: soma das divisões
valor / pesode cada recurso.
📌 Exemplo: Planeta com Água, Oxigênio e Ouro.
- Valor total =
180 + 300 + 120 = 600 - Valor por peso =
(180/10) + (300/2) + (120/25)
-
Criada com uma quantidade inicial de combustível.
-
Possui uma posição inicial = 0.
-
Consome 3L de combustível por posição viajada.
-
Métodos principais:
getQuantidadeDeCombustivel()→ retorna combustível atual.explorar(planeta ou lista de planetas)→ viaja até planetas, coleta recursos e retorna à posição inicial, respeitando as limitações de combustível.
📌 Regras de exploração
- A nave sempre tenta retornar à posição inicial após explorar.
- Se faltar combustível, a nave para na posição máxima possível (“à deriva”).
📊 Exemplo de trajetória
-
[N _ _ P1 _ _ P2]→ Nave (posição 0), Planeta P1 (posição 3), Planeta P2 (posição 6).- Vai até P1, coleta recursos.
- Vai até P2, coleta recursos.
- Retorna ao ponto inicial (se houver combustível).
-
[N _ _ _ _ P]→ Nave (posição 0), Planeta P (posição 5).- Vai até P, coleta recursos.
- Retorna ao ponto inicial (ou até onde o combustível permitir).
O projeto exige a implementação dos seguintes testes:
deveFicarADerivaQuandoFaltarCombustivelParaIrAteUmPlanetadeveTerValorTotalZeradoQuandoNaoExistirNenhumRecursodeveTerValorTotalQuandoExistirRecursosNoPlanetadeveTerValorPorPesoZeradoQuandoNaoExistirNenhumRecursodeveTerValorPorPesoQuandoExistirRecursosNoPlaneta
📌 Exemplo de Teste
@Test
public void deveFicarADerivaQuandoFaltarCombustivelParaIrAteUmPlaneta() {
int posicaoEsperada = 3;
int combustivelEsperado = 1;
Nave milleniumFalcon = new Nave(10);
Planeta tatooine = new Planeta(4, new ArrayList<>());
List<Recurso> recursos = milleniumFalcon.explorar(tatooine);
int posicaoResultante = milleniumFalcon.getPosicao();
int combustivelFinal = milleniumFalcon.getQuantidadeDeCombustivel();
Assert.assertTrue(recursos.isEmpty());
Assert.assertEquals(combustivelEsperado, combustivelFinal);
Assert.assertEquals(posicaoEsperada, posicaoResultante);
}-
A exploração pode receber uma prioridade para ordenar os planetas antes da coleta:
- Pela posição.
- Pelo valor total dos recursos.
- Pelo valor por peso dos recursos.
📌 Exemplo: Se a prioridade for valor total, a nave deve explorar do planeta com maior valor total até o de menor valor.
👉 Os testes devem comprovar que a prioridade escolhida altera o combustível gasto.
- Java (lógica e modelagem)
- JUnit (testes unitários)
- IntelliJ IDEA
├── .idea → Configurações do IntelliJ IDEA (IDE)
├── src → Diretório principal do projeto
│ ├── main\java\ExploracaoEspacial → Código-fonte da aplicação (classes principais)
│ └── test\java\ExploracaoEspacial → Testes unitários (JUnit)
├── target → Arquivos compilados e gerados pelo Maven
├── expected_tests.txt → Lista dos testes obrigatórios para validação
├── pom.xml → Configuração do Maven (dependências e build)
