Chess Roguelike
Un gioco ispirato agli scacchi, con le regole dei roguelike
Cosa fa
Un gioco che mescola gli scacchi con i roguelike: partite sempre diverse, pezzi che migliorano e nemici sempre più difficili.
Come guadagna
Presentato su Hacker News dal suo creatore, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: vendita del gioco completo, anche sugli store.
Rendilo tuo
- Lo stesso mix con altri giochi da tavolo classici: dama, scopa, briscola.
- Versione con la briscola sarebbe tutta italiana.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Scacco Avventura": un gioco che mescola gli scacchi con i roguelike: si affrontano scontri sempre diversi contro pezzi nemici, si vincono potenziamenti per i propri pezzi, e se si perde si ricomincia da capo. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con "Nuova avventura" e le schermate
2. Mappa dell'avventura: scontri, negozi, eventi, boss
3. Scacchiera dello scontro con i potenziamenti visibili
4. Scelta della ricompensa dopo ogni vittoria
5. Collezione dei potenziamenti scoperti e classifica
Stile: fantasy elegante: scacchiera in legno scuro #3F2A1D e chiaro #D6B98C, pezzi con contorni dorati, sfondo blu notte #111827, carattere "Cinzel" per i titoli e "Inter" per il resto. Nessuna immagine generica di stock.
Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.
2. Database, account e sicurezza
Collega il progetto a Supabase e attiva la registrazione con email e password.
Crea queste tabelle:
- "partite": seme della partita, scontri vinti, potenziamenti raccolti, esito, collegate all'utente
- "profili": piano
Regole di sicurezza obbligatorie:
- ogni utente vede solo le sue partite; la classifica mostra nome e scontri vinti
- il gioco gira nel browser
- il piano non si modifica dal browser
Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.
3. Scontri e avversario
Ogni avventura nasce da un seme casuale: la mappa (8 piani di scontri, negozi, eventi e un boss) e gli eserciti nemici dipendono dal seme, così una partita si può rigiocare o condividere.
Gli scontri si giocano su una scacchiera normale ma con regole modificate dai potenziamenti (es. "il tuo cavallo può anche muoversi di una casella in diagonale", "il primo pedone catturato torna in gioco"). L'avversario sceglie la mossa con una ricerca minimax a 2–3 mosse di profondità, più profonda nei piani alti (codice nei Dettagli tecnici).
Dopo ogni vittoria si sceglie una ricompensa tra 3: un pezzo nuovo, un potenziamento o monete per il negozio.
4. Collezione e classifica
La collezione mostra i potenziamenti scoperti, quelli ancora sconosciuti come sagome. Sfida settimanale con lo stesso seme per tutti e classifica.
Gratis si gioca con la classe "Re" e 20 potenziamenti; il pacchetto completo sblocca altre 3 classi (Regina, Torre, Alfiere) e 60 potenziamenti.
5. Pagamenti con Stripe
Aggiungi un pagamento singolo di 5,99 € una volta sola. Il pagamento sblocca 3 classi in più, 60 potenziamenti e la modalità infinita.
A pagamento riuscito il webhook imposta "piano" a "pro" nella tabella "profili", sulla riga dell'utente indicata in client_reference_id.
Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.
6. Controlli specifici di questo progetto
Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Equilibrio: gioca 10 avventure con potenziamenti diversi: nessuna combinazione deve rendere il gioco impossibile o banale.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
L'avversario: minimax con potatura alfa-beta
L'avversario prova le mosse possibili qualche mossa avanti e sceglie quella che lascia la posizione migliore, saltando i rami inutili (alfa-beta). La valutazione conta il materiale.
import { Chess, type Move } from "chess.js";
const VALORI: Record<string, number> = { p: 1, n: 3, b: 3.2, r: 5, q: 9, k: 0 };
// Materiale del Nero meno quello del Bianco (l'avversario gioca con il Nero)
function valuta(gioco: Chess): number {
let punti = 0;
for (const riga of gioco.board()) for (const pezzo of riga) {
if (pezzo) punti += (pezzo.color === "b" ? 1 : -1) * VALORI[pezzo.type];
}
return punti;
}
function minimax(gioco: Chess, profondita: number, alfa: number, beta: number, massimizza: boolean): number {
if (profondita === 0 || gioco.isGameOver()) {
if (gioco.isCheckmate()) return massimizza ? -1000 : 1000;
return valuta(gioco);
}
for (const m of gioco.moves({ verbose: true })) {
gioco.move(m);
const v = minimax(gioco, profondita - 1, alfa, beta, !massimizza);
gioco.undo();
if (massimizza) alfa = Math.max(alfa, v); else beta = Math.min(beta, v);
if (beta <= alfa) break; // potatura: questo ramo non serve
}
return massimizza ? alfa : beta;
}
export function mossaAvversario(gioco: Chess, profondita = 2): Move {
let migliore: Move | null = null, valoreMigliore = -Infinity;
for (const m of gioco.moves({ verbose: true })) {
gioco.move(m);
const v = minimax(gioco, profondita - 1, -Infinity, Infinity, false) + Math.random() * 0.1; // un po' di varietà
gioco.undo();
if (v > valoreMigliore) { valoreMigliore = v; migliore = m; }
}
return migliore!;
}
Pezzi comuni a tutti i progetti
Glossario
- Roguelike
- Un genere di giochi con partite sempre diverse, generate a caso, in cui se perdi ricominci da capo.
- Minimax
- Il metodo classico dei programmi di scacchi: prova le mosse in anticipo immaginando che l'avversario risponda al meglio.