Jogo de estratégia comercial e industrial ambientado na SACU (União Aduaneira da África Austral — a mais antiga do mundo, de 1910). Dois jogadores comandam a política açucareira de países rivais: 🇿🇦 África do Sul (a potência industrial) contra 🇸🇿 Essuatíni (a exportadora enxuta). 🇧🇼 Botsuana, 🇱🇸 Lesoto e 🇳🇦 Namíbia são compradores controlados pelo computador, cada um com personalidade própria.
Jogue em: https://<seu-usuario>.github.io/sacu/
- Com um amigo: combinem uma senha qualquer (ex.:
zebra-melado-42). Os dois clicam em Jogar com amigo, digitam a mesma senha e pronto — vocês se encontram e a partida começa. Também dá para mandar um link com a senha embutida. - Solo: jogue contra a IA para treinar suas táticas.
As mensagens da partida trafegam por servidores relay MQTT públicos (via WebSocket, funciona em qualquer rede onde a web funciona) e são criptografadas de ponta a ponta com chave derivada da senha (AES-GCM + PBKDF2); até o nome do tópico é um hash da senha. Quem não sabe a senha não encontra a partida nem lê nada.
A cada uma das 10 safras, os dois decidem em segredo e ao mesmo tempo:
| Decisão | Efeito |
|---|---|
| 💰 Preço | Barato conquista mercado; caro engorda a margem |
| 🏭 Ritmo de produção | Excedente é exportado ao preço mundial (com desconto) |
| 👷 Salários | Apertar barateia, mas humor baixo gera greves |
| 🏗️ Investimento | Mais capacidade (+24 kt) ou custos menores (-6%) |
| 🤝 Charme | Melhora a relação com um comprador (Lesoto premia lealdade) |
| 🎩 Lobby | Empurra a tarifa externa comum para cima ou para baixo |
A tarifa externa encarece o açúcar de fora (Brasil, Tailândia…), mas a receita aduaneira vai para uma partilha que favorece o país pequeno — Essuatíni recebe 22%, a África do Sul só 17%, como na SACU de verdade. Eventos aleatórios (secas, safras brasileiras, cotas da UE, dossiês de ONGs) sacodem cada safra.
Vitória: soma de riqueza, fatia dos mercados vizinhos, diplomacia, humor do povo e crescimento industrial. 👑
- No GitHub, vá em Settings → Pages.
- Em Build and deployment, escolha Deploy from a branch.
- Selecione a branch principal e a pasta / (root). Salve.
- Em ~1 minuto o jogo estará no ar em
https://<seu-usuario>.github.io/sacu/.
O repositório precisa ser público para o Pages funcionar no plano gratuito.
Site 100% estático, sem build: HTML + CSS + JavaScript (ES modules) puro. A única biblioteca é o MQTT.js (embutida em js/mqtt.min.js), usada para o relay do multiplayer. Para usar um broker próprio, defina window.SACU_BROKERS = ['wss://seu-broker/mqtt'] antes de carregar js/app.js.
index.html # telas do jogo
css/style.css # visual
js/engine.js # motor: economia, mercados, eventos, IA, placar (lógica pura)
js/net.js # encontro por senha via relay MQTT, com criptografia
js/app.js # interface e orquestração multiplayer/solo
Para rodar localmente: python3 -m http.server na raiz e abra http://localhost:8000.
Para testar o balanceamento do motor (IA contra IA):
node --input-type=module -e "
import { createGame, resolveRound, aiDecide, finalScore } from './js/engine.js';
const g = createGame(42);
while (!g.over) resolveRound(g, { ZAF: aiDecide(g, 'ZAF'), SWZ: aiDecide(g, 'SWZ') });
console.log(finalScore(g));
"