Home

LaMoSca v0.01

La rappresentazione della scacchiera

Obiettivo

MonitorLa prima versione del programma usa la rappresentazione convenzionale della scacchiera 8x8 per gestire l'input e memorizzare le mosse scelte durante il gioco, senza nessun controllo sulla loro correttezza secondo le regole degli scacchi e senza essere in grado di generarne autonomamente.

L'interfaccia del programma è per il momento quella a carattere della console del computer di Windows.

L'obiettivo di questa versione è solo quello di verificare che l'ambiente di sviluppo software sia in ordine prima di iniziare parti più complesse.

Le alternative

La rappresentazione della scacchiera su computer è una scelta particolarmente importante perché da essa deriva molta dell'efficienza del software nella generazione ed analisi della posizione dei pezzi durante il gioco e quindi della scelta delle mosse da effettuare in una partita di scacchi.

La rappresentazione su computer più immediata tramite una matrice 8x8 è poco utilizzata, visto che la scansione delle case da parte del software richiederebbe l'aggiornamento di due indici (riga/colonna). Più comune (es.: GNU Chess) è la rappresentazione tramite due vettori di 64 elementi, uno per i pezzi degli scacchi e uno per i colori delle case.

10x12Una prima variante della 8x8 è la rappresentazione 12 x 10, ottenuta con un vettore di 120 elementi (es.: Phalanx). Questa rappresentazione semplifica la verifica da parte del computer che una mossa cada all'interno della scacchiera aggiungendo righe e colonne alle case di gioco che contengono valori convenzionali (es.: -1) per evidenziare casa di destinazione delle mosse non valide.

Tenendo conto delle caratteristiche della mossa del cavallo, sono necessarie due case di bordo oltre alle 8 case convenzionali, che porta il numero delle righe a 12 (due righe superiori e due inferiori). Per le colonne la scansione sequenziale del vettore farà si che le colonne del bordo destro e sinistro saranno attraversate in successione, per cui possono essere combinate considerando solamente due colonne aggiuntive, per un totale di 12 righe per 10 colonne.

Per motivi di efficienza, è anche possibile avere rappresentazioni su 16 colonne, rendendo i dati multipli di 8 bit e quindi facilitando il trasferimento dati tra processore e memoria del computer, oltre alle operazioni all'interno del processore stesso.

Programmi di scacchi con una rappresentazione 8x8 effettuano il test di validità della casa destinazione con una trasformazione temporanea alla 10x12 durante il gioco al momento della verifica della legalità delle mosse, come mostrato nel seguito.

Altra rappresentazione è quella tramite bitboard (es.: Crafty). Con le bitboard non si rappresentano le 64 case della scacchiera, ma i 12 pezzi degli scacchi (pedone, torre, cavallo, alfiere, regina, re sia per il bianco che nero). Assegnando 64 bit a ciascun pezzo (uno per ogni casa) ed indicando con degli "1" le posizioni d'interesse, è possibile ottenere in maniera molto compatta le stesse informazioni della rappresentazione convenzionale. Ad esempio, una bitboard per i cavali bianchi è mostrata a lato.

Per aumentare l'efficienza del programma, alle 12 bitboard dei vari pezzi sono di solito aggiunte altre bitboard, ad esempio per memorizzare la posizione complessiva dei pezzi bianchi o di quelli neri. Con questa rappresentazione è possibile ricavare informazioni complesse in maniera molto rapida tramite singole operazioni logiche. Ad esempio, per capire se in una fase del gioco un pezzo è attaccato da un altro, basta eseguire l'AND tra le due relative bitboard, operazione che, con processori a 64 bit, è eseguita in un solo ciclo macchina.

00000000
00000000
00000000
00000000
00000000
00000000
00000000
01000010

Il codice

Il software è scritto per poter essere eseguito come "Win32 Console Application". La struttura del programma, quindi, è convenzionale con "main", standard input/output, ecc.: riferimenti a proposito possono essere trovati in testi base sul linguaggio "C", a partire dal classico "The C Programming Language" di Kernighan-Ritchie.

Il main si preoccupa solo di acquisire la stringa dalla riga di comando, verificare se è uno dei comandi del motore ed infine tentare di interpretare la stringa come coordinate di una mossa da eseguire.

Per la memorizzazione delle posizioni, viene usata un vettore di 64 record, che assegna ad ogni casa un valore separato per il colore ed il pezzo che eventualmente la occupa. Questa rappresentazione non è sicuramente la più efficiente, ma è stata usata per semplificare la leggibilità del codice.

Dopo aver scaricato e compilato il software, è possibile provare a digitate qualche comando per vedere se ci sono segni di vita: ad esempio, è possibile provare l'interessantissima apertura d1e8 ;-)

Download

LaMoSca01.zip (1.85 k)

Da fare

  • far generare le mosse dal programma;
  • scegliere la mossa migliore valutando la posizione raggiunta;
  • prevedere risposte dell'avversario e scegliere possibili contromosse.

... praticamente tutto :-(

Link


Indietro Indice Avanti