Skip to content

Este projeto consiste em uma simulação espacial. A aplicação foi desenvolvida com foco em lógica de programação e modelagem orientada a objetos, permitindo a criação de recursos, planetas e naves exploradoras, cada um com atributos e regras específicas.

Notifications You must be signed in to change notification settings

gabrdsp/Interplanetary-Resource-Explorer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌌 Interplanetary Resource Explorer

Serenity do Firefly

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.


🚀 Funcionalidades

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

Planetas

  • 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 / peso de 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)

Nave Espacial

  • 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

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

🧪 Testes Unitários Obrigatórios

O projeto exige a implementação dos seguintes testes:

  • deveFicarADerivaQuandoFaltarCombustivelParaIrAteUmPlaneta
  • deveTerValorTotalZeradoQuandoNaoExistirNenhumRecurso
  • deveTerValorTotalQuandoExistirRecursosNoPlaneta
  • deveTerValorPorPesoZeradoQuandoNaoExistirNenhumRecurso
  • deveTerValorPorPesoQuandoExistirRecursosNoPlaneta

📌 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);
}

🔧 Bônus (Funcionalidade Extra)

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


🛠️ Tecnologias

  • Java (lógica e modelagem)
  • JUnit (testes unitários)
  • IntelliJ IDEA

📂 Estrutura de Diretórios


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


About

Este projeto consiste em uma simulação espacial. A aplicação foi desenvolvida com foco em lógica de programação e modelagem orientada a objetos, permitindo a criação de recursos, planetas e naves exploradoras, cada um com atributos e regras específicas.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages