Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • app app
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Ludo Pets
  • appapp
  • Merge requests
  • !54

Merged
Created May 27, 2025 by Vinícius Rodrigues Da Silva@vinicius.rodriguesDeveloper

Feat/71 minigame flap pet

  • Overview 0
  • Commits 31
  • Changes 31

O que esse MR faz?

Cria um minigame inspirado no Flappy Bird, mas com uma mecânica diferente: em vez do pet pular, ele pilota um aviãozinho. Ao tocar no lado esquerdo da tela, o avião desce; ao tocar no lado direito, o avião sobe, levando o pet junto. Além disso, a cada 5 obstáculos superados, o jogador ganha uma moeda.

Screenshots

Antes Depois
game
minigameRouterOld minigameRouter

Como configurar e validar localmente?

  1. Acessar a aba de minigames e clicar em FlappyPet
  2. Clicar em começar na tela de start, e iniciar o jogo

Explicação dos arquivos

app/(tabs)/minigames/FlappyPetGame

Tela de início do jogo, onde é configurado o Provider para compartilhamento de variáveis entre os componentes do minigame.


components/minigames/flappyPet

Componente que controla o fluxo do jogo, como start, game over e um possível pause (planejado para o futuro). Este componente também é responsável por chamar o Renderer, onde o jogo é de fato renderizado.


components/minigames/Renderer

Responsável pela renderização do jogo.
Aqui são utilizados alguns hooks que cuidam da física e da dinâmica do jogo.
É também neste componente que o Pet e os Obstáculos são renderizados na tela.


hooks/minigames/flappyPet

Pasta que contém os hooks utilizados no minigame. Eles são:

  1. useCollisionDetection.tsx
    Responsável por gerenciar as colisões do pet com o chão e com os obstáculos.

  2. useGamePhysics.tsx
    Gerencia a física aplicada ao pet, como a gravidade, a movimentação de subida e descida ao clicar nos botões, além de controlar a inclinação do avião com o pet dentro.

  3. useObstacleManager.tsx
    Administra os obstáculos, controlando seu movimento no eixo X.
    Também contabiliza as coins e o score, já que ambos estão vinculados à quantidade de obstáculos ultrapassados sem colisão.

  4. useGameManager.tsx
    Hook responsável por consumir o context do minigame.


contexts/minigames/flappyPet

Context criado para compartilhar estados como:

  • gameOver
  • idleGame
  • Contagem de coins
  • Contagem de score

Dessa forma, evita-se a passagem de dados por várias props até o componente de destino, tornando o código mais limpo e eficiente.

Arquivos modificados

Modifiquei o index.tsx, localizado em app/(tabs)/minigames/, mais especificamente na função handleNavigateToGame.

O motivo da alteração é que essa função estava utilizando o navigation do React Native, enquanto nosso projeto utiliza o Expo Router. Isso, pelo menos no meu ambiente, estava causando um erro na segunda renderização dos minigames (tanto o meu quanto os outros, apenas no mobile).

Ou seja, quando o jogo terminava (game over) e eu tentava jogar novamente, a aplicação quebrava, pois não conseguia recriar corretamente os componentes.

Deixei prints do que foi alterado, caso seja necessário reverter para a implementação anterior.


Observações

Caso algo não funcione como esperado, podem me chamar!
Só consegui testar no meu aparelho Android e não tive acesso a outros dispositivos para validar se está tudo certo, principalmente quanto às colisões e outros possíveis bugs.

Fico à disposição para ajustar qualquer coisa, se necessário.

Assignee
Assign to
Reviewer
Request review from
Time tracking
Source branch: feat/71-minigame-FlapPet