← Tutte le idee Giochi e hobby

Build a GPU

Un gioco in cui costruisci una scheda video, pezzo per pezzo

Cosa fa

Gioco educativo nel browser: costruendo una scheda video si impara come funziona davvero un processore grafico.

Come guadagna

Presentato su Hacker News dal suo creatore, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: versione per scuole e corsi, livelli avanzati a pagamento.

Rendilo tuo

  • Lo stesso approccio per spiegare altre cose complesse giocando: come funziona internet, una centrale elettrica, il corpo umano.
  • Per gli istituti tecnici italiani.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Costruisci la GPU": un gioco educativo nel browser: livello dopo livello si costruisce una scheda video semplificata e si capisce perché le GPU sono così veloci (tante unità che fanno la stessa cosa insieme), fino a disegnare un'immagine. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con l'animazione e "Inizia"
2. Mappa dei livelli: dal singolo calcolo ai pixel, ai thread, alla memoria
3. Livello: componenti da collegare, programma da scrivere, risultato da ottenere
4. Simulazione passo passo con i registri che si illuminano
5. Area scuole

Stile: da circuito elettronico: sfondo verde scuro #052E16 come una scheda, piste dorate #EAB308, LED colorati, carattere "JetBrains Mono" per il codice e "Space Grotesk" per i titoli. 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:
- "progressi": livello, completato, numero di cicli usati, collegati all'utente
- "classi": insegnante, codice, studenti
- "profili": piano

Regole di sicurezza obbligatorie:
- ogni utente vede solo i suoi progressi; l'insegnante quelli della sua classe
- il gioco gira tutto 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. Tante corsie, un'istruzione

Il cuore del gioco è un piccolo simulatore di GPU (codice nei Dettagli tecnici): più "corsie" eseguono la stessa istruzione nello stesso momento, ognuna su un pixel diverso. Il giocatore scrive programmi brevissimi in un linguaggio semplice (somma, moltiplica, confronta, scrivi colore) e vede le corsie lavorare insieme.

Livelli: 1) una corsia colora un pixel; 2) 4 corsie colorano 4 pixel nello stesso tempo; 3) una sfumatura su tutta l'immagine; 4) le corsie che prendono strade diverse con "se...allora" e perché rallenta (divergenza); 5) la memoria condivisa; 6) disegnare un cerchio, poi un piccolo frattale.

Ogni livello ha un obiettivo e un numero massimo di cicli: meno cicli, più stelle.

4. Simulazione passo passo e scuole

La simulazione si può eseguire un ciclo alla volta: si illuminano le corsie attive, i registri cambiano valore, e l'immagine si riempie. Spiegazioni brevi a fine livello collegano il gioco alle GPU vere.

Area scuole: l'insegnante crea una classe e vede i livelli completati dagli studenti, con schede didattiche scaricabili.

5. Pagamenti con Stripe

Aggiungi un pagamento singolo di 4,99 € una volta sola. I primi 5 livelli sono gratis; il pagamento sblocca tutti i 20 livelli, la modalità libera e l'area scuole.

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. Didattica: fai provare i primi 5 livelli a una persona che non sa nulla di informatica: deve riuscire a finirli solo con le spiegazioni del gioco.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Un mini-simulatore di GPU

Tutte le corsie eseguono la stessa istruzione allo stesso ciclo, ognuna con i suoi registri. Con "se" alcune corsie si spengono (maschera): così si vede perché la divergenza rallenta.

type Istruzione =
  | { op: "carica_x" | "carica_y"; r: number }                  // r = coordinata del pixel della corsia
  | { op: "somma" | "molt"; r: number; a: number; b: number }
  | { op: "costante"; r: number; valore: number }
  | { op: "se_minore"; a: number; b: number }                    // spegne le corsie dove a >= b
  | { op: "fine_se" }
  | { op: "colore"; r: number };                                 // scrive il registro come colore del pixel

export function esegui(programma: Istruzione[], larghezza: number, altezza: number) {
  const corsie = larghezza * altezza;                            // una corsia per pixel
  const registri = Array.from({ length: corsie }, () => new Float32Array(8));
  let attive = new Array(corsie).fill(true);
  const pile: boolean[][] = [];
  const immagine = new Float32Array(corsie);
  let cicli = 0;

  for (const ist of programma) {
    cicli++;                                                     // un ciclo per istruzione, per TUTTE le corsie
    if (ist.op === "se_minore") {
      pile.push(attive);
      attive = attive.map((a, i) => a && registri[i][ist.a] < registri[i][ist.b]);
      continue;
    }
    if (ist.op === "fine_se") { attive = pile.pop() ?? attive; continue; }
    for (let i = 0; i < corsie; i++) {
      if (!attive[i]) continue;                                  // corsia spenta: aspetta e basta
      const r = registri[i];
      if (ist.op === "carica_x") r[ist.r] = i % larghezza;
      else if (ist.op === "carica_y") r[ist.r] = Math.floor(i / larghezza);
      else if (ist.op === "costante") r[ist.r] = ist.valore;
      else if (ist.op === "somma") r[ist.r] = r[ist.a] + r[ist.b];
      else if (ist.op === "molt") r[ist.r] = r[ist.a] * r[ist.b];
      else if (ist.op === "colore") immagine[i] = r[ist.r];
    }
  }
  return { immagine, cicli };   // i cicli non dipendono dal numero di pixel: ecco la forza della GPU
}

Pezzi comuni a tutti i progetti

Glossario

GPU
Il processore della scheda video: fa migliaia di calcoli semplici tutti insieme.
Divergenza
Quando le unità di una GPU dovrebbero fare cose diverse e alcune devono aspettare le altre: rallenta tutto.