Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Relatório do Projeto Final

  • Título do projeto: Tamaccino
  • Tema: Jogo de simulação / Tamagotchi
  • Integrantes da equipe: Maria Mariana de Melo Cavalcante, Maria Rita de Figueiredo Feitosa e Sérgio Gabriel Rodrigues Freitas
  • Disciplina: Programação Orientada a Objetos
  • Professor: Gabriel da Silva Belarmino

Tópicos


Introdução

O projeto é um jogo estilo Tamagotchi, no qual o jogador cria e cuida de um bichinho virtual que passa por diferentes fases de vida. A experiência é dividida em três momentos:

  • Fase Ovo: o bichinho ainda não nasceu; o jogador precisa brincar com o ovo para acelerar a eclosão.
  • Fase Filhote: o bicho nasce e começa a ter necessidades reais (fome, felicidade e saúde) que precisam ser gerenciadas pelo jogador ao longo do tempo.
  • Fase Adulto: o bichinho evolui com comportamentos ligeiramente diferentes, envelhecendo até o fim de sua vida.

O jogo conta com uma interface gráfica feita em Java Swing, sistema de save/load por serialização de objetos, tela de configurações com opções de tamanho de janela e velocidade do timer, loja de itens com sistema de moedas, minigames para ganhar moedas, além de personalização do ovo com diferentes sprites coloridos.


Modelagem

classDiagram
    direction TB
 
    class Tama {
        <<abstract>>
        #String nome
        -int fome, felicidade, idade
        -int cansaco, saudeNivel
        -boolean saude, sono, vivo
        -double peso
        -LocalDate dataCriacao
        -CorOvo corOvo
        -int skinFilhoteSelecionada, skinAdultoSelecionada
        -int moedas, itensRemedio, itensBrinquedo
        -int itensDoce, itensSaudavel
        -int totalRefeicoes, totalBrincadeiras
        -ArrayList~String~ coco
        +get/setNome(String) void
        +get/setFome(int) void
        +get/setFelicidade(int) void
        +get/setIdade(int) void
        +get/setSaudeNivel(int) void
        +get/setMoedas(int) void
        +get/setCansaco(int) void
        +get/setCorOvo(CorOvo) void
        +get/setSkinFilhote(int) void
        +get/setSkinAdulto(int) void
        +alimentar(TipoComida, boolean) void
        +brincar() void
        +limparCoco() void
        +aplicarRemedio() void
        +morte() void
        +adicionarItem(ItemLoja, int) void
        +consumirItem(ItemLoja) boolean
        +addMoedas(int) void
        +gastarMoedas(int) boolean
        +envelhecer()* void
        +evoluir()* Tama
    }
 
    class Ovo {
        +Ovo(String nomeDigitado)
        +envelhecer() void
        +evoluir() Tama
    }
 
    class Filhote {
        +Filhote(String nome, int idade)
        +envelhecer() void
        +evoluir() Tama
    }
 
    class Adulto {
        +Adulto(String nome, int idade, int fome, int felicidade, double peso, int saudeNivel)
        +envelhecer() void
        +evoluir() Tama
    }
 
    class TipoComida {
        +comidaSaudavel(double peso) double
        +comidaDoce(double peso) double
    }
 
    class ItemLoja {
        <<enumeration>>
        REMEDIO
        BRINQUEDO
        COMIDA_DOCE
        COMIDA_SAUDAVEL
        -String nome
        -int preco
        +getNome() String
        +getPreco() int
    }
 
    class CorOvo {
        <<enumeration>>
        ROXO
        ROSA
        AZUL
        AMARELO
        SEM_FUNDO
    }
 
    class TamaMortoException {
        +TamaMortoException(String mensagem)
    }
 
    class EntradaESaida {
        +salvar(Tama)$ void
        +carregar()$ Tama
        +salvarAparenciaOvo(String)$ void
        +carregarAparenciaOvo()$ String
    }
 
    class Configuracoes {
        -TamanhoTela tamanhoTela$
        -Dificuldade dificuldade$
        -boolean somAtivo$
        -boolean musicaAtiva$
        +carregar()$ void
        +salvar()$ void
        +get/setTamanhoTela(TamanhoTela)$ void
        +get/setDificuldade(Dificuldade)$ void
        +is/setSomAtivo(boolean)$ void
        +is/setMusicaAtiva(boolean)$ void
    }
 
    class TamanhoTela {
        <<enumeration>>
        PADRAO
        GRANDE
        +toDimension() Dimension
        +fromValue(String)$ TamanhoTela
    }
 
    class Dificuldade {
        <<enumeration>>
        FACIL
        NORMAL
        DIFICIL
        +getIntervaloMs() int
        +fromValue(String)$ Dificuldade
    }
 
    class Tamaccino {
        +main(String[])$ void
    }
 
    class MinigameHubDialog {
        -SelecaoMinigame selecao
        -SelecaoMinigame destaque
        +MinigameHubDialog(JFrame parent)
        +MinigameHubDialog(JFrame parent, SelecaoMinigame destaque)
        +getSelecao() SelecaoMinigame
    }
 
    class SelecaoMinigame {
        <<enumeration>>
        MEMORIA
        REFLEXO
        PEDRA_PAPEL_TESOURA
        NENHUM
    }
 
    class ReflexGameDialog {
        -int rodadaAtual
        -int acertos, moedasGanhas
        +getMoedasGanhas() int
    }
 
    class MemoryGameDialog {
        -List~Integer~ sequencia
        -int rodadaAtual, moedasGanhas
        +getMoedasGanhas() int
    }
 
    class PedraPapelTesouraDialog {
        -int vitoriasJogador, vitoriasCpu
        -int moedasGanhas
        +getMoedasGanhas() int
    }
 
    class GameOver {
        +GameOver()
    }
 
    Tama <|-- Ovo
    Tama <|-- Filhote
    Tama <|-- Adulto
 
    TamaMortoException --|> Exception
 
    Tama --> CorOvo : usa
    Tama ..> TipoComida : usa
    Tama ..> ItemLoja : usa
    Tama ..> TamaMortoException : lança
 
    Configuracoes --> TamanhoTela : contém
    Configuracoes --> Dificuldade : contém
 
    EntradaESaida ..> Tama : serializa
 
    MinigameHubDialog --> SelecaoMinigame : contém
    MinigameHubDialog ..> ReflexGameDialog : abre
    MinigameHubDialog ..> MemoryGameDialog : abre
    MinigameHubDialog ..> PedraPapelTesouraDialog : abre
Loading

Como o bichinho passa por diferentes estágios de vida com comportamentos distintos, foi criada uma classe-mãe abstrata Tama e três classes-filhas que representam cada fase: Ovo, Filhote e Adulto. Esse design permite o uso de herança e polimorfismo, com dois métodos abstratos, evoluir() e envelhecer(), que são implementados de forma diferente em cada fase.

Tama concentra todos os atributos comuns (nome, fome, felicidade, peso, saúde, moedas, itens, etc.) e os métodos concretos compartilhados, como alimentar(), brincar() e fazerCoco(). Cada subclasse sobrescreve apenas o que muda de comportamento em sua fase de vida.

Para o tratamento de situações especiais, foi criada a exceção personalizada:

TamaMortoException

A interface gráfica é gerenciada por três janelas principais:

MenuPrincipal → JanelaPrincipal → (TelaConfiguracoes como overlay)

O ciclo de vida do bicho é controlado por um Timer interno na JanelaPrincipal, que a cada intervalo de tempo incrementa a idade, verifica evoluções e atualiza o estado de fome e felicidade. O estado é persistido automaticamente via serialização Java na pasta saves/.

O jogo também conta com uma loja de itens onde o jogador pode gastar moedas para comprar remédios, brinquedos e comidas, e com três minigames acessíveis pelo MinigameHubDialog: Memória, Reflexo e Pedra-Papel-Tesoura, cada um com sistema de recompensa em moedas.


Ferramentas utilizadas

  • Aseprite
  • Figma
  • Java 21 (ou superior)
  • Java Swing (interface gráfica)
  • IntelliJ IDEA / VSCode (IDEs)
  • Serialização Java nativa (save/load)
  • Java Properties (configurações e metadados)

Estrutura dos pacotes

📂 br.com.tamagotchi
├── 📂 model
│   ├── Tama.java               ← classe abstrata base
│   ├── TipoComida.java
│   └── ItemLoja.java           ← enum de itens da loja
├── 📂 fases
│   ├── Ovo.java
│   ├── Filhote.java
│   └── Adulto.java
├── 📂 exceptions
│   └── TamaMortoException.java
├── 📂 gui
│   ├── 📂 utils
│   │   └── Tamaccino.java      ← ponto de entrada (main)
│   └── 📂 screen
│       ├── MenuPrincipal.java
│       ├── JanelaPrincipal.java
│       ├── PainelTama.java
│       ├── TelaConfiguracoes.java
│       ├── GameOver.java
│       ├── MinigameHubDialog.java
│       ├── ReflexGameDialog.java
│       ├── MemoryGameDialog.java
│       └── PedraPapelTesouraDialog.java
├── 📂 io
│   └── EntradaESaida.java
└── 📂 util
    └── Configuracoes.java

Como rodar o projeto localmente

Para isso, é necessário ter instalado:

  • Java 21 (ou superior)
  • Uma IDE como IntelliJ IDEA ou VSCode com extensão Java

1. Clonando o repositório

git clone https://github.com/seu-usuario/seu-repositorio.git

2. Abrindo o projeto

Abra a pasta do projeto na sua IDE preferida.

Certifique-se de que a pasta resources/sprites/ovo/ existe na raiz do projeto e contém os arquivos de sprite .png. Sem eles, o jogo usa um fallback visual desenhado com formas geométricas.

3. Rodando o projeto

Execute o arquivo principal:

src/main/java/br/com/tamagotchi/gui/utils/Tamaccino.java

Ou via linha de comando, dentro da pasta do projeto compilado:

java -cp out br.com.tamagotchi.gui.utils.Tamaccino

4. Primeira execução

Na tela inicial, clique em Novo Jogo, escolha um nome e o estilo do ovo. O jogo cria automaticamente a pasta saves/ para armazenar seu progresso.

Atalhos de teclado

Tecla Ação
F11 Alterna tela cheia
ESC Sai da tela cheia

Resultados e considerações finais

Ao final foi possível alcançar o objetivo inicial com um jogo funcional de ponta a ponta, cobrindo criação, evolução e morte do bichinho virtual. O projeto trouxe aprendizado direto sobre os conceitos de orientação a objetos, especialmente herança, polimorfismo e encapsulamento, aplicados em um contexto real e visual.

Trabalhar com Java Swing para construir a interface gráfica foi um dos maiores desafios do projeto, já que exigiu entender o sistema de layout, pintura customizada com Graphics2D e o ciclo de eventos da EDT. A implementação do sistema de save e load por serialização também foi um ponto de aprendizado importante, tornando o estado do jogo persistente entre sessões.

No geral, foi gratificante ver o bichinho tomando vida, nascendo do ovo, crescendo, sentindo fome e reagindo às ações do jogador, exatamente como planejado desde a modelagem inicial.

About

final project of poo.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages