← Tutte le idee Giochi e hobby

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.