个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Tower defense 2.5D de plantas contra zumbis, com elementos (natureza, água, elétrico, fogo…),
sinergias entre plantas, mutações roguelite, clima dinâmico e trilha sonora original.
O jogo se chamava "PvZ: Evolution" e o repositório, pvz-evolution; em outubro de 2026 tudo passou a se chamar cerca-viva
(site, repositório e id do app Android com.cercaviva.jogo). Links antigos do GitHub redirecionam; o endereço antigo do site não.
Roda no navegador e no Android (app Capacitor).
public/convite/.main. Como não vem da Play Store, o Android pede para
permitir instalar apps dessa origem. O APK é assinado com uma chave fixa e pública
(android/app/cerca-viva-debug.keystore), para cada versão nova instalar por cima da anterior; para
publicar na Play Store será preciso uma chave privada.Requer Node.js 20.
npm install
npm run dev # abre em http://localhost:5180 (também acessível pela rede local)
| Comando | O que faz |
|---|---|
npm run dev | Servidor de desenvolvimento com recarga automática (porta 5180) |
npm run build | Confere os tipos (tsc) e gera o site em dist/ |
npm run preview | Serve o dist/ gerado, para testar o build final |
npm test | Roda os testes automáticos (Vitest) de tests/: progresso salvo e catálogo de fases |
npm run mobile:sync | Build + copia o site para o projeto Android (npx cap sync android) |
npm run mobile:apk | Gera o APK de debug no Windows (gerar-apk.ps1, precisa do Android SDK) |
npm run mobile:patch | Gera um patch .zip do site em patches/ (gerar-patch.ps1) |
Os botões 💀 Chefe (invoca a Colheitadeira Z na hora) e 🌦️ (troca o clima) só aparecem no modo dev, porque quebram a progressão de quem está jogando:
npm run dev, sempre;?dev=1 no fim (ex.: .../index.html?dev=1).A regra fica em src/modo-dev.ts; para mostrar outro elemento só no modo dev, dê a ele a classe
so-dev e o atributo hidden no index.html.
O workflow .github/workflows/ci.yml roda npm ci, npm run build e npm test em todo push de
branch claude/** e em todo pull request para a main. Ele não publica nada: só mostra ✅ ou ❌ na
branch e no pull request, para você saber antes do merge se o build e os testes passam.
main dispara o workflow .github/workflows/deploy.yml, que:
Cerca-Viva-Android-APK na execução do Actions.capacitor.config.json aponta server.url
para o site do GitHub Pages. Por isso, depois de instalado uma vez, o app recebe toda versão nova
publicada na main, sem reinstalar.public/sw.js, registrado por src/updater.ts) guarda o jogo em cache para abrir
rápido e funcionar sem internet:
index.html) vem da rede primeiro, então a versão nova aparece já na primeira abertura;
sem internet, abre a cópia guardada;assets/ (com hash no nome) vêm direto do cache; sprites e ícones vêm do cache e
se atualizam em segundo plano;npm run build o dist/sw.js ganha uma versão nova (impressão digital do build, feita pelo
plugin do vite.config.ts com src/sw-versao.ts). O navegador instala o service worker novo, a
página recarrega uma vez sozinha e os caches antigos são apagados. O progresso salvo
(localStorage) não é tocado. No npm run dev a versão fica __VERSAO_DO_BUILD__.
publicar-atualizacao.ps1faz build, commit de tudo e push direto namain, ou seja, publica na hora. Use só quando quiser mandar a versão para o celular.
| Arquivo | Conteúdo |
|---|---|
index.html | HUD, menu inicial, modais (deck, almanaque, mutações, recompensa de planta, seleção de fases, fim de jogo) |
src/main.ts | Liga a interface ao motor: menus, deck, botões, loop do jogo |
src/engine.ts | Motor do jogo: grade, plantas, zumbis, projéteis, clima, poderes, sinergias |
src/renderer.ts | Desenho 2.5D dos personagens, animações e partículas |
src/audio.ts | Efeitos e trilha sonora sintetizados com Web Audio |
src/types.ts | Tipos e catálogos: plantas, biomas, sinergias, mutações |
src/levels.ts | Fases do modo aventura (Mundo 1: 1-1 a 1-10; Mundos 2 a 4: cinco fases cada) e ondas |
src/musgo.ts | Musgo-Esponja, recompensa do Mundo 2 (fase 2-5): números da planta num lugar só |
src/mangue-vermelho.ts | Mangue-Vermelho, recompensa do Mundo 4 (fase 4-5): números da planta num lugar só |
src/progresso-sanitizar.ts | Confere o progresso carregado contra os catálogos (fase que não existe, planta desconhecida, repetida) |
src/progression.ts | Progresso do jogador salvo no localStorage (chave pvz_player_progress_v1) |
src/updater.ts | Registro do service worker e recarga quando chega versão nova |
src/sw-versao.ts | Versão do service worker gerada no build |
android/ | Projeto Android gerado pelo Capacitor |
src/levels.ts (LEVEL_CATALOG). Vencer a última fase de um
mundo (fechaMundo) mostra "Mundo N concluído"; o Mundo 2 dá o Musgo-Esponja (src/musgo.ts)
e o Mundo 4 dá o Mangue-Vermelho (src/mangue-vermelho.ts).src/types.ts.src/progression.ts (DEFAULT_PLAYER_PROGRESS).src/progresso-sanitizar.ts. Se o progresso salvo tiver algo
estranho, o jogo corrige campo por campo e guarda o texto original em
pvz_player_progress_v1_antes_da_correcao (para voltar, copie esse valor de volta para
pvz_player_progress_v1 nas ferramentas do navegador).Depois de mexer nessas regras, rode npm test: os testes de tests/levels.test.ts conferem que as fases
seguem em sequência, que toda planta liberada existe, que nenhuma é liberada duas vezes e que os zumbis
e as linhas das ondas são válidos. Zumbi novo no motor (ZombieVariant em src/engine.ts) precisa
entrar também em KNOWN_ZOMBIES no teste.
Um agente agendado trabalha no projeto em branches claude/… (nunca na main). O quadro de status,
as regras dele e o registro de decisões ficam em docs/status/ na branch claude/quadro.