Este projeto é um clone moderno, responsivo e de alto polimento visual do clássico jogo Flappy Bird, desenvolvido em Flutter utilizando conceitos de arquitetura modular (MVC), física 2D simulada no próprio loop de quadros e persistência de dados.
Projetado especificamente para servir como demonstração de portfólio de engenharia de software e UI/UX de jogos em plataformas Mobile e Web.
- Game Loop Robusto (Frame-Rate Independent): Utiliza
Tickernativo do Flutter calculando a variação de milissegundos por quadro (dtou delta-time). Isso garante a mesma velocidade de física e rolagem de cenário em telas de 60Hz, 90Hz, 120Hz ou superiores. - Física Realista Simulada: Equações de movimento linear para simular gravidade e impulso de pulo (
jump), além de inclinação visual dinâmica do pássaro com base na sua velocidade vertical de queda. - Geração Dinâmica de Obstáculos (Spawning & Despawning): Lógica procedural de geração de canos a cada 1.8 segundos com alturas de vão livre aleatórias. Remoção proativa dos canos fora da tela para evitar vazamentos de memória (despawning automático).
- Detecção de Colisão Precisa (AABB): Implementação matemática de colisões retangulares do tipo Axis-Aligned Bounding Box entre o pássaro (hitbox circular simplificada) e as extremidades superior/inferior dos canos.
- Estética Premium Retro:
- Parallax horizontal de fundo (skyline da cidade deslocando-se mais lentamente para criar profundidade 3D).
- Animação de sprite do pássaro batendo asas e fallback vetorial idêntico (caso os assets falhem).
- Tipografia pixelada clássica de fliperamas (
Press Start 2P) aplicada em toda a interface e no HUD de pontuação. - Transições suaves com efeitos de fade-in e slide-up na tela de Game Over.
- Persistência de Recordes (High Score): Gravação em disco do maior recorde de pontuação utilizando o pacote
shared_preferences.
O projeto foi organizado de forma modular, desacoplando a lógica de física dos elementos visuais:
lib/
├── main.dart # Configuração de orientação, status bar e inicialização do Provider
├── components/ # Elementos gráficos e atores do jogo
│ ├── bird.dart # Pássaro animado por sprites com fallback de desenho vetorial
│ └── pipe.dart # Par de canos de obstáculos com flip vertical para a parte superior
├── controllers/ # Lógica de negócios e simulação física
│ └── game_controller.dart # Máquina de estados (GameState), gravidade, colisões e recordes
└── views/ # Interface de usuário (Screens e Overlays)
├── game_view.dart # Palco do jogo (Stage) gerenciando o Ticker e fundo Parallax
├── menu_view.dart # Tela de Menu Inicial com animação de flutuação e estatísticas
└── game_over_view.dart # Painel de Fim de Jogo com transições de fade-in e opções de reinício
Você pode calibrar toda a dinâmica do jogo de forma simples alterando as constantes físicas no topo da classe GameController (lib/controllers/game_controller.dart):
// Aceleração da gravidade (pixels por segundo ao quadrado)
static const double gravity = 900.0;
// Velocidade vertical aplicada para cima ao pular (pixels por segundo)
static const double jumpForce = -350.0;
// Velocidade terminal máxima de queda
static const double maxFallSpeed = 480.0;
// Velocidade horizontal com que os canos correm
static const double pipeSpeed = 200.0;
// Intervalo de tempo de nascimento dos novos canos (segundos)
static const double spawnInterval = 1.8; - Flutter SDK instalado no seu ambiente de desenvolvimento (versão recomendada
>= 3.12.2).
- Clone o repositório para o seu ambiente local.
- Navegue até o diretório do projeto e execute o comando para baixar as dependências:
flutter pub get
- Execute o projeto no seu dispositivo conectado ou emulador:
flutter run