Um jogo 2D desenvolvido com TypeScript + PixiJS, criado como projeto autoral para explorar desenvolvimento de jogos, animação por spritesheet, programação orientada a objetos e construção de interfaces interativas.
O projeto acompanha Olivia, uma personagem que pode se movimentar pelo cenário, executar animações e enfrentar inimigos em uma experiência inspirada nos clássicos jogos 2D.
Nerd Game é um projeto experimental e autoral desenvolvido para colocar em prática conceitos de desenvolvimento de jogos utilizando tecnologias web.
O foco principal do projeto está na criação de:
- 🎮 Sistema de movimentação do personagem
- 🧍 Personagem jogável
- 🚶 Animações de movimento
- 🦘 Animação de pulo
- ⚔️ Sistema preparado para ações de combate
- 👾 Sistema de inimigos
- ❤️ Barra de vida
- 🎨 Cenários e elementos gráficos
- 🧩 Spritesheets e animações em frames
- 🏗️ Organização do código em componentes/classes
| Tecnologia | Utilização |
|---|---|
| TypeScript | Linguagem principal |
| PixiJS | Engine/renderização 2D |
| JavaScript | Base da aplicação |
| HTML5 | Estrutura da aplicação |
| CSS | Estilização |
| Git | Controle de versão |
| GitHub | Hospedagem do código |
nerd-game/
│
├── assets/
│ ├── player/
│ │ ├── Olivia-idle.json
│ │ ├── Olivia-idle.png
│ │ ├── Olivia-walk.json
│ │ ├── Olivia-walk.png
│ │ ├── Olivia-jump.json
│ │ └── Olivia-jump.png
│ │
│ └── ...
│
├── src/
│ ├── Player.ts
│ ├── Enemy.ts
│ └── main.ts
│
├── index.html
├── package.json
├── tsconfig.json
└── README.md
A estrutura pode evoluir conforme novas mecânicas e sistemas forem adicionados ao jogo.
A personagem principal é Olivia.
O sistema de animação utiliza spritesheets, permitindo que cada estado do personagem seja composto por vários frames.
- Idle — personagem parada
- Walk — personagem caminhando
- Jump — personagem pulando
Cada animação é organizada através de arquivos .png e .json, permitindo que o PixiJS carregue e reproduza os frames individualmente.
Exemplo:
Olivia-idle.png
Olivia-idle.json
Olivia-walk.png
Olivia-walk.json
Olivia-jump.png
Olivia-jump.json
As animações são carregadas através do sistema de Assets e Spritesheet do PixiJS.
Exemplo:
const idleSheet = await Assets.load<Spritesheet>({
alias: 'OliviaIdle',
src: '/assets/player/Olivia-idle.json'
});Os frames são então utilizados para construir as animações do personagem.
Isso permite separar os diferentes estados da personagem e controlar quando cada animação deve ser executada.
Os controles atuais do jogo utilizam o teclado.
| Tecla | Ação |
|---|---|
A / ← |
Mover para esquerda |
D / → |
Mover para direita |
Espaço |
Pular |
Os controles podem ser ampliados conforme novas mecânicas forem implementadas.
O projeto também possui uma estrutura dedicada aos inimigos.
A lógica é separada da classe principal do jogador, permitindo que diferentes tipos de inimigos sejam adicionados futuramente.
Exemplo de organização:
import { Enemy } from './Enemy';A arquitetura foi pensada para permitir a evolução do sistema para diferentes comportamentos, ataques e interações.
O jogo possui uma interface de vida do personagem.
A HUD pode ser atualizada conforme o estado do jogador muda, permitindo futuramente implementar:
- Dano
- Cura
- Game Over
- Sistema de vidas
- Indicadores de inimigos
- Status do jogador
O projeto busca manter responsabilidades separadas entre os diferentes elementos do jogo.
Responsável principalmente pela inicialização do jogo e configuração do ambiente PixiJS.
main.ts
│
├── Inicialização do PixiJS
├── Carregamento dos assets
├── Criação do cenário
├── Criação do Player
└── Criação dos Enemy
Responsável pelo comportamento do personagem:
Player
├── Movimento
├── Animações
├── Pulo
├── Direção
└── Estado do personagem
Responsável pela lógica dos inimigos:
Enemy
├── Posição
├── Movimento
├── Estado
└── Interação com o jogador
Clone o repositório:
git clone https://github.com/vguelere/nerd-game.gitEntre na pasta:
cd nerd-gameInstale as dependências:
npm installExecute o projeto:
npm run devDepois, abra o endereço informado pelo Vite no navegador.
Durante o desenvolvimento, o projeto utiliza:
npm run devPara verificar o código TypeScript:
npx tsc --noEmitO Nerd Game também funciona como um laboratório de aprendizado e desenvolvimento.
Entre os principais objetivos estão:
- Aprender desenvolvimento de jogos 2D
- Aprofundar conhecimentos em TypeScript
- Trabalhar com PixiJS
- Desenvolver sistemas de animação
- Trabalhar com spritesheets
- Praticar orientação a objetos
- Criar sistemas de colisão
- Desenvolver inteligência básica para inimigos
- Trabalhar com HUDs
- Organizar um projeto de software
- Utilizar Git e GitHub durante o desenvolvimento
- Estrutura inicial do jogo
- PixiJS
- TypeScript
- Personagem Olivia
- Sistema de Player
- Animação Idle
- Animação Walk
- Ani