♟️ Scacchi
Il gioco strategico più antico del mondo con AI integrata
← Torna a Virtual Desktop Site
Descrizione
Scacchi è un’implementazione completa del gioco degli scacchi con motore AI basato su algoritmo minimax e valutazione posizionale. L’applicazione include tutte le regole ufficiali FIDE, interfaccia drag-and-drop intuitiva e livelli di difficoltà regolabili.
Caratteristiche
Gameplay Completo
- Regole FIDE: implementazione completa delle regole ufficiali
- Validazione mosse: controllo automatico mosse legali
- Notazione algebrica: visualizzazione mosse in formato standard
- Cronologia partita: elenco mosse giocate con navigazione
- Undo/Redo: annulla e ripristina mosse
Mosse Speciali
Tutte le mosse speciali sono implementate:
Arrocco (Castling)
- Corto (O-O): re si muove di 2 case verso torre lato re
- Lungo (O-O-O): re si muove di 2 case verso torre lato donna
- Condizioni: re e torre non devono essersi mai mossi, nessun pezzo tra loro, re non sotto scacco
En Passant
- Cattura speciale del pedone quando passa di 2 case accanto a pedone avversario
- Disponibile solo immediatamente dopo il movimento del pedone avversario
Promozione Pedone
- Pedone che raggiunge ottava traversa si trasforma in:
- Regina (scelta predefinita)
- Torre, Alfiere, Cavallo (scelta manuale)
Motore AI
Algoritmi
- Minimax con Alpha-Beta Pruning: ricerca albero mosse con potatura
- Valutazione Posizionale: analisi materiale e posizione pezzi
- Opening Book: database aperture comuni
- Endgame Tablebase: posizioni finali pre-calcolate
Livelli di Difficoltà
- Principiante: profondità ricerca 2 (mosse casuali)
- Facile: profondità 3 (errori occasionali)
- Medio: profondità 4 (gioco solido)
- Difficile: profondità 5 (valutazione avanzata)
- Esperto: profondità 6 (near-perfect play)
- Gran Maestro: profondità 7+ (calcolo intensivo)
Interfaccia Utente
Drag & Drop
- Click e trascina: sposta pezzi con mouse
- Highlight mosse legali: evidenzia case disponibili al click
- Ghost piece: anteprima posizione durante drag
- Snap to grid: allineamento automatico rilascio
Indicatori Visivi
- Ultimo mossa: evidenziazione casa partenza/arrivo
- Scacco: evidenziazione re sotto attacco
- Mosse legali: punti su case disponibili
- Pezzi catturati: visualizzazione pezzi eliminati
Modalità Visualizzazione
- 2D Classica: vista dall’alto stile tradizionale
- Notazione: coordinate algebriche a1-h8
- Flip board: inversione prospettiva (nero in basso)
Valutazione Posizionale
Valore Materiale
Punteggi standard Reinfeld:
- Pedone: 1 punto
- Cavallo: 3 punti
- Alfiere: 3 punti (bonus coppia alfieri: +0.5)
- Torre: 5 punti
- Regina: 9 punti
- Re: infinito (cattura = fine partita)
Valutazione Posizionale
Fattori considerati:
- Controllo centro: pezzi su d4, e4, d5, e5 (bonus)
- Sviluppo pezzi: cavalli e alfieri attivi (bonus early game)
- Sicurezza re: arrocco completato, pedoni protezione
- Struttura pedoni: doppiati (malus), isolati (malus), passati (bonus)
- Mobilità: numero mosse legali disponibili
- Controllo colonne aperte: torri su colonne senza pedoni
Piece-Square Tables
Tabelle posizionali per ogni tipo di pezzo:
// Esempio: Pedone preferisce centro e avanzamento
const pawnTable = [
[0, 0, 0, 0, 0, 0, 0, 0],
[50, 50, 50, 50, 50, 50, 50, 50],
[10, 10, 20, 30, 30, 20, 10, 10],
[5, 5, 10, 25, 25, 10, 5, 5],
[0, 0, 0, 20, 20, 0, 0, 0],
...
];
Algoritmo Minimax
Pseudocodice
function minimax(depth, isMaximizing, alpha, beta) {
// Caso base: profondità 0 o partita finita
if (depth === 0 || gameOver()) {
return evaluatePosition();
}
if (isMaximizing) {
let maxEval = -Infinity;
for (let move of getAllLegalMoves()) {
makeMove(move);
let eval = minimax(depth - 1, false, alpha, beta);
undoMove(move);
maxEval = Math.max(maxEval, eval);
alpha = Math.max(alpha, eval);
if (beta <= alpha) break; // Potatura Beta
}
return maxEval;
} else {
let minEval = Infinity;
for (let move of getAllLegalMoves()) {
makeMove(move);
let eval = minimax(depth - 1, true, alpha, beta);
undoMove(move);
minEval = Math.min(minEval, eval);
beta = Math.min(beta, eval);
if (beta <= alpha) break; // Potatura Alpha
}
return minEval;
}
}
Alpha-Beta Pruning
Ottimizzazione che elimina rami inutili dell’albero di ricerca:
- Alpha: miglior valore garantito per il massimizzatore
- Beta: miglior valore garantito per il minimizzatore
- Potatura: se β ≤ α, interrompi ricerca in quel ramo
Riduce complessità da O(b^d) a O(b^(d/2)) nel caso ottimale.
Implementazione Tecnica
File Principali
core/js/chess.js: motore scacchi e validazione mossecore/js/chess-ai.js: algoritmo minimax e valutazionecore/js/chess-ui.js: interfaccia drag-and-dropcore/styles/chess.css: stili scacchiera e pezzi
Tecnologie
- Canvas API: rendering scacchiera e pezzi (alternative: SVG)
- Bitboards: rappresentazione efficiente posizioni (64-bit integers)
- Move Generation: algoritmi per calcolo mosse legali
- FEN Notation: serializzazione/deserializzazione posizioni
- PGN Export: esportazione partite in formato standard
Rappresentazione Posizione (FEN)
Forsyth–Edwards Notation:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
- Posizione pezzi (8 righe separate da
/) - Turno (
w= bianco,b= nero) - Diritti arrocco (
KQkq) - En passant target (
-se nessuno) - Halfmove clock (regola 50 mosse)
- Fullmove number
Ottimizzazioni Performance
Move Ordering
Ordina mosse per probabilità di essere migliori:
- Catture con guadagno materiale (MVV-LVA)
- Mosse killer (trovate ottime in posizioni simili)
- Mosse quiet (normali)
Transposition Table
Cache per posizioni già valutate:
const transpositionTable = new Map();
// Chiave: hash Zobrist posizione
// Valore: { eval, depth, bestMove }
Quiescence Search
Continua ricerca oltre profondità target per posizioni “rumorose” (catture, scacchi).
Storia degli Scacchi
Origini (VI secolo)
- Chaturanga (India): antenato diretto
- Shatranj (Persia): diffusione medio oriente
- Europa medievale: regole moderne (XV-XVI secolo)
Evoluzione Regole
- 1475: introduzione movimento regina moderno (Italia)
- 1560: en passant e arrocco standardizzati
- 1851: primo torneo internazionale (Londra)
Computer Chess
Tappe Fondamentali
- 1950: Claude Shannon propone algoritmo minimax
- 1956: Los Alamos Chess - primo programma completo
- 1997: Deep Blue batte Kasparov (prima vittoria AI vs campione mondiale)
- 2017: AlphaZero (Google DeepMind) - rete neurale auto-addestrata
Forza Moderna
Motori top (Stockfish, Komodo, AlphaZero):
- Rating Elo: ~3500+ (vs ~2850 migliori umani)
- Profondità calcolo: 40+ ply (20+ mosse complete)
- Posizioni/secondo: 100+ milioni
Strategie di Base
Aperture
- Controllo centro: e4, d4 prime mosse più comuni
- Sviluppo pezzi: cavalli e alfieri prima delle torri
- Sicurezza re: arroccare early game
Mediogioco
- Debolezze strutturali: attaccare pedoni isolati/doppiati
- Linee aperte: posizionare torri su colonne aperte
- Attacco al re: sacrifici per esporre re avversario
Finale
- Attivazione re: re diventa pezzo offensivo
- Pedoni passati: promuovere pedoni avanzati
- Finali teorici: re+torre vs re, re+regina vs re
Link Utili
- Chess.com - Lezioni Gratuite
- Lichess - Gioco Online Open Source
- Chess Programming Wiki
- Stockfish - Motore Open Source
- FIDE - Regole Ufficiali
Gioca a Scacchi sul desktop virtuale aprendo l’icona ♟️ Scacchi dal gruppo Mini Apps.