← Voltar ao portfólio Flutter Web · Node.js · PostgreSQL

Nao te errite

Aplicação web multiplayer em tempo real inspirada no jogo de tabuleiro angolano Não Te Irrites. Suporta sessões configuráveis para até 4 jogadores, autenticação (JWT e OAuth 42), salas com códigos, chat em sala, upload de avatar e persistência em PostgreSQL. Containerizada para deployment com Docker.

Flutter Web Node.js Socket.IO PostgreSQL Docker
Flutter
Node.js
Socket.IO
PostgreSQL
Docker

O que o projeto faz

  • Autenticação segura — registo/login com JWT e OAuth 2.0 (42 Intra).
  • Multiplayer em tempo real — até 4 jogadores por sala, com sincronização via Socket.IO.
  • Configurações de jogo — escolha do número de peças, dados e jogadores antes da partida.
  • Sistema de salas e lobby — criar/entrar por código, convidar jogadores e gerir estados de ready.
  • Chat integrado — mensagens no lobby e durante o jogo.
  • Upload de avatar e perfis de utilizador.
  • Deploy containerizado com Nginx e Let's Encrypt para HTTPS em produção.

Por que é relevante

Demonstra domínio full-stack: frontend em Flutter Web, backend em Node.js/Express com Socket.IO para comunicação em tempo real, persistência em PostgreSQL e orquestração com Docker. Mostra práticas de autenticação, sincronização de estado e deployment seguro.

Aprendizados

  • Socket.IO e WebSockets para sincronização em tempo real entre clientes.
  • Design de lógica de jogo e gestão de estado multi-jogador.
  • Autenticação, sessões JWT e integração OAuth 2.0 (42 Intra).
  • Modelagem relacional e migrações com PostgreSQL e Prisma.
  • Containerização e deployment com Docker Compose e Nginx.

História

O jogo "Não Te Errites" é uma variante popular do Ludo jogada em várias regiões de Angola. Tem raízes em jogos de percurso europeus e foi adaptado localmente ao longo do tempo, ganhando variantes regionais com regras ligeiramente diferentes. Nesta implementação escolhemos a versão mais comum e generalizável, suportando opções configuráveis para acomodar variantes locais.

Regras

O projeto implementa a variante geral do jogo "Não Te Errites" (semelhante ao Ludo). As regras principais implementadas são:

  • Entrada (início das peças): Cada jogador tem um número fixo de peças fora do tabuleiro. Para colocar uma peça na casa de entrada é necessário obter um valor específico nos dados (configurável; por exemplo, um 6).
  • Movimentação: O jogador move uma peça pelo número de casas indicado pelos dados; regras de bloqueio e sobreposição seguem variantes comuns (peças do mesmo jogador podem formar bloqueios, conforme configuração da sala).
  • Captura de peças inimigas: Se uma peça aterrissar numa casa ocupada por uma peça adversária, a peça adversária é capturada e enviada de volta à sua área inicial. Algumas casas podem ser seguras (configuráveis) onde capturas não ocorrem.
  • Vitória: O objetivo é levar todas as peças do jogador até à zona final (casa de chegada). O jogo suporta tanto vitória única (primeiro a completar vence) quanto contagens por posição conforme as regras da sala.

As regras foram implementadas de forma flexível para permitir variantes regionais através das opções configuráveis da sala (peças por jogador, número de dados, regras de captura e casas seguras).

Demonstrações

Vídeos demonstrativos do jogo em dois modos: online e offline.

Modo Online

Partida demonstrativa utilizando conexão ao servidor (WebSockets).

Modo Offline

Demonstração em ambiente local / modo sem servidor.