尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Lig 4 (Connect Four) multiplayer para jogar pelo celular durante uma palestra: a plateia entra por QR code, joga em duplas e o telão mostra as partidas e o placar em tempo real.
localStorage + um apelido{ roomId, playerId, column } para /api/move| Rota | O que é |
|---|---|
/ | Criar sala / entrar com código de 4 letras |
/sala/ABCD | Partida: 1º a entrar = vermelho, 2º = amarelo, o resto assiste |
/bot | Contra o bot (minimax com poda alfa-beta, 3 níveis, roda só no navegador) |
/telao | Partidas ao vivo + placar, para projetor |
supabase/migrations/0001_init.sql e clique em Run. Isso cria as tabelas, liga o RLS (o cliente só lê) e adiciona rooms e wins ao Realtime.anon / publishable) e a chave secreta (service_role / secret).Requer Node 20.9+.
npm install
cp .env.example .env.local # e preencha as 3 variáveis do Supabase
npm run dev:lan
dev:lan escuta em todas as interfaces, para os celulares no mesmo Wi-Fi acessarem http://IP-DA-MÁQUINA:3000. Em dev, o QR code já usa o IP da rede mesmo se você abrir pelo localhost. Se ele escolher a placa de rede errada, force com LAN_IP=192.168.0.10 npm run dev:lan. No Windows, permita o Node no firewall quando ele perguntar (rede privada).
Sem as variáveis do Supabase o app sobe mesmo assim, só com o modo contra o bot.
npm test # testes da lógica do jogo (vitória, empate, bot)
npm run typecheck
| Variável | Valor |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | URL do projeto Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | chave pública (anon / publishable) |
SUPABASE_SERVICE_ROLE_KEY | chave secreta (service_role / secret). Nunca com prefixo NEXT_PUBLIC_ |
NEXT_PUBLIC_SITE_URL | opcional: URL pública usada no QR (ex.: https://lig4.vercel.app) |
lib/game: playMove, findWinner, isDraw e o bot, sem React nem Supabase. A API e o bot usam o mesmo código.UPDATE da jogada só passa se move_count no banco ainda for o lido. Dois toques ao mesmo tempo → o segundo recebe 409 e o cliente re-sincroniza.rooms (ativas nas últimas 2h) e wins. Os UUIDs dos jogadores ficam em room_seats, que o anon não lê, para ninguém jogar no lugar de outro. Toda escrita usa a service role, só no servidor.