Project Plateau
Project Plateau는 네 개의 유리판과 하나의 살아있는 계곡, 캠프로 돌아가는 길을 의미
아직 감지된 업데이트가 없습니다. 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.