Solo un piccolo passo (2015/11/10) : in rete http://www.elegio.it/omnia/sc/altri-scacchi.html
Come progetto di fare per memorizzare varie partite includendo le alternative possibili dall'inizio dell'incontro
Cerco di fare in modo che ad ogni turno ci sia una sola mossa anche se la mossa implica altri spostamenti di pezzi come accade quando si fa l'arrocco.
Precedentemente prevedevo anche due mosse per consentire di indicare come si vuole promuovere un Pedone che ha raggiunto il traguardo. Ovviamente la promozione è a Regina dato che la Regina è il pezzo più potente nel gioco degli scacchi.... ma a volte, in rare situazioni, per vincere quasi subito, può essere conveniente promuovere il Pedone non a Regina ma a Torre o Alfiere o Cavallo... sopratutto a Cavallo che ha la facoltà di arrivare dove la Regina non riuscirebbe ad arrivare...
Allora una soluzione sarebbe questa... Quando il Pedone Bianco sta nella traversa 7 e se ha la possibilità di avanzare raggiungendo il suo traguardo, ha quattro opzioni: traversa 8 se viene promosso a Regina, traversa 1 se viene promosso a Torre, traversa 2 se viene promosso ad Alfiere e traversa 3 se viene promosso a Cavallo.
Ovviamente lui andrà sempre e solo alla traversa 8 ma se, per esempio, la traversa indicata fosse la 3 diventerà un Cavallo etc...
Analogamente si fa per il Pedone Nero che, arrivato alla traversa 2, potrebbe raggiungere il suo traguardo ossia la traversa 1. Se si indicherà veramente la traversa 1 verrà promosso a Regina ma se si indicherà la traversa 8 verrà promosso a Torre, se la 7 verrà promosso ad Alfiere e se la 6 verrà promosso a Cavallo.... ma ovviamente occupando comunque lo scacco che ha raggiunto rispettando le regole del suo movimento e come se fosse promosso a Regina, la scelta più probabile.Questa impostazione però è troppo complicata se uso una cifra decimale per indicare il colore del pezzo. Nella cifra decimale posso quindi nascondere altre informazioni aggiuntive ossia, per esempio, un Pedone Bianco/Blu ha colore 0 se, al suo traguardo, viene promosso a Regina, 2 se promosso a Torre, 4 se promosso ad Alfiere e 6 se promosso a Cavallo. Analogamente, per il Pedone Nero/Rosso uso le stesse cifre ma aumentate di 1.
Ci sono due fasi di specifica della partita. La prima è il posizionamento dei pezzi sia Bianchi/Blu che Neri/Rossi e la seconda le mosse, una mossa per turno...
Nella prima fase l'intero positivo usato va interpretato in questo modo:
- Il tipo del pezzo è questo: 0==Scacco vuoto ( ma non ha senso usarlo nella prima fase di posizionamento dei pezzi sulla scacchiera ) 1==Re, 2==Regina, 3==Torre, 4==Alfiere, 5==Cavallo, 6==Pedone.
- Due cifre. Dove va messo il pezzo prima di iniziare la partita: la prima cifra è la traversa e la seconda riga è la colonna ( cifre da 1 ad 8 nel gioco classico ). Si indica come prima cifra la colonna perché tradizionalmente, nel gioco degli scacchi la colonna viene indicata per prima e da una lettera (a, b, c, d, e, f, g, h ) e non da una cifra.
- Una singola cifra. Colore del pezzo. Se pari il pezzo è Bianco/Blu e se dispari il pezzo è Nero/Rosso. Nel caso del Re questa cifra indica anche la facoltà di arroccare.
Se 0 o 1 il Re Bianco o Nero non può arroccare. Se 2 o 3 il Re Bianco o Nero può fare l'arrocco lungo ossia verso la Torre a sinistra. Se 4 o 5 il Re Bianco o Nero può fare l'arrocco corto ossia verso la Torre a destra. Se 6 o 7 il Re Bianco o Nero può fare sia l'arrocco lungo che l'arrocco corto.Nella seconda fase ossia quella delle mosse, l'intero positivo usato va interpretato in questo modo:
- Tutte le cifre prima della sesta: quante risposte sono previste o concesse all'avversario. Anche se la partita è terminata questa cifra deve essere 1 e senza che venga fatto un movimento ( in genere si fa finta di spostare senza spostarlo uno scacco vuoto ). Questa regola consente di fare evolvere TUTTI i rami fino al turno finale da cui deve partire l'analisi della partita descritta dal particolare ramo.
- Una cifra del pezzo catturato dalla mossa. Questo per potere ricostruire quel particolare ramo della partita andando sia avanti che indietro nel turno. Se, nella fase di creazione di un dato turno si cambia parere e si decide una mossa diversa ritenuta più vantaggiosa, bisogna potere ristabilire la scacchiera iniziale del turno e fare la mossa diversa con la diversa eventuale cattura del pezzo dell'avversario.
- Due cifre. La traversa e la colonna di arrivo del pezzo. Se il Pedone raggiunge il suo traguardo bisognerà includere nella cifra di precisazione del colore anche l'informazione dell tipo di promozione scelto.
- Una cifra. Tipo del pezzo prima che si muova: 0==Il vuoto va non usato, 1==Re, 2==Regina, 3==Torre, 4==Alfiere, 5==Cavallo, 6==Pedone. Ovviamente questo dato, analizzando la partita dall'inizio, è inutile ossia ridondante ma serve a controllare che non si siano commessi degli errori anche nella indicazione di come spostare il pezzo.
- Due cifre. La traversa e la colonna di partenza del pezzo. Ovviamente, nel ricostruire la partita è noto il tipo del pezzo che viene mosso e dunque si può accertare se la mossa è legale o errata. Se errata l'analisi si blocca con appropriata segnalazione dell'errore.
- Una cifra che specifica il colore del pezzo e serve per dare informazioni aggiuntive sulla facoltà di arrocco del Re e sulla modalità di promozione del Pedone arrivato alla traversa traguardo.Per il Pedone Bianco/Blu il tipo di promozione si indica in questo modo: 0==Regina, 2==Torre, 4==Alfiere, 6==Cavallo mentre per il Pedone Nero/Rosso, in questo modo: modo: 1==Regina, 3==Torre, 5==Alfiere, 7==Cavallo.
Dato che, quando si specifica una mossa si indica il numero delle mosse concesse all'avversario è automatico capire, quale mossa seguente risulta la successiva delle varie mosse specificate nel turno precedente.
In questo modo diventa possibile creare un albero di mosse. Quando inizia la partita, il colore che deve muovere, solitamente il Bianco, ha la possibilità di fare parecchie mosse alternative e per ciascuna di esse l'avversario ha la possibilità di fare parecchie mosse di risposta. Dunque per esempio supponiamo che si abbiano 20 mosse legali come prima mossa. Se le risposte sono 20 saranno da considerare 20*20=400 alternative e la sequenza più probabile è quella in cui, ad ogni mossa del Bianco, il Nero risponda in modo che la situazione di quando tocca ancora al Bianco sia la meno favorevole per lui. Nota quindi la probabile risposta del Nero il Bianco prediligerà la mossa che sia a lui più favorevole. Bisogna dunque avere a disposizione una funzione empirica che valuti e quantizzi il vantaggio di ogni disposizione degli scacchi confrontata alla disposizione iniziale. Il Bianco cercherà il valore più alto e positivo mentre il Nero il valore più negativo ossia più alto in valore assoluto ma negativo.La memorizzazione dei dati viene fatta in modo molto diverso dalla specifica delle mosse. Ci sono infatto 10 dati distinti ossia :
// // Fase di inizializzazione : // [0,0,0,0,TipoPezzo,Colonna,Traversa,Colore,0,0] // // Mossa standard: // [QuantiFigli,TipoPreso,ColFin,TravFin,TipoPezzo, ColIni,TravIni,Colore,Padre,Primog] //Si tratta di un modo di memorizzare la mossa sprecando memoria ma, almeno in questi studi preliminari, il numero di mosse è relativamente piccolo, difficilmente superiore al milione di mosse e dunque alla decina di milioni di interi per cui, data la grande disponibilità di memoria degli attuali PC, va privilegiata la velocità di accesso ed utilizzo dell'albero anche se memorizzato in modo poco risparmioso.
♜ | ♞ | ♝ | ♛ | ♚ | ♝ | ♞ | ♜ |
---|---|---|---|---|---|---|---|
♟ | ♟ | ♟ | ♟ | ♟ | ♟ | ♟ | ♟ |
♙ | ♙ | ♙ | ♙ | ♙ | ♙ | ♙ | ♙ |
♖ | ♘ | ♗ | ♕ | ♔ | ♗ | ♘ | ♖ |
Per fare prove dell'algoritmo progettato qui
Javascript non è attivato!
Provando ad usare la versione attuale che sono, poco fa riuscito a fare funzionare, noto una fatica per specificare la scacchiera di partenza. Tutti quegli interi non consentono di avere una visione globale. IL RIMEDIO CHE CERCHERÒ DI ATTUAREScrivere un programma che renda subito comprensibile la struttura della scacchiera di ingresso e facile la gestione Javascript ed HTML. TORNARE AL PASSATO E ALLE CONVENZIONI GIÀ REPERIBILI IN RETE....
Dunque ora devo realizzare il semplice TRADUTTORE che mi consenta di semplificare la specifica della partita a scacchi sia classica che eretica. Sono incerto se usare questa convenzione: https://it.wikipedia.org/wiki/Notazione_Forsyth-EdwardsLa FEN si basa su un sistema sviluppato dal giornalista scozzese David Forsyth (1854-1909).
Tale sistema acquistò popolarità nel XIX secolo; Steven Edwards lo ampliò
per consentirne l'uso da parte degli elaboratori elettronici.
La FEN è parte integrante della Notazione Portable Game,
essendo utilizzata per definire la posizione iniziale ove essa non coincida
con quella usuale.
In pratica soddisfa alle mie esigenze di specificare tutto ma non ho capito se va sempre bene per specificare l'albero delle mosse ossia ricostruire la scacchiera a cui si riferisce una data mossa di cui va valutata la convenienza per il giocatore che la attua. Devo studiarla in modo approfondito pensando ai possibili ampliamenti per includere le belle Segretarie. |
Da fareDato che le mie convenzioni saranno MOLTO più ampie di quelle ufficiali della FIDE scriverò un TRADUTTORE dalle convenzioni mie a quelle della FIDE ( http://www.fide.com/ ). Tra l'altro Milano ha l'onore di ospitare la sede della Federazione Scacchistica Italiana https://it.wikipedia.org/wiki/Federazione_Scacchistica_Italiana in viale Regina Giovanna 12 ( http://www.federscacchi.it/ ) Notazione_Portable_Game
Mosse speciali vengono ulteriormente specificate: La cattura di un pezzo viene indicata con una x. Ad esempio Dxe4 che significa "la Regina
♕
cattura e si porta in e4".
Lo Scacco viene indicato con un
+ . Ad esempio De4+ che significa "la Regina
♕
si porta in e4 e mette il Re
♚
sotto Scacco".Lo Scacco matto viene indicato con
# oppure con ++ .
Ad esempio De4# ossia ♕e4#
oppure De6++ ossia ♕e6++ .L'Arrocco corto viene indicato con
O-O , mentre l'Arrocco lungo con
O-O-O .La Promozione viene indicata con = seguito dall'iniziale del nuovo pezzo. Ad esempio c1=D
ossia c1=♕ che
significa il Pedone raggiunge la casella c1 e viene promosso Regina.
Critica mia: questa notazione ufficiale non è pensata per descrivere le diramazioni ( l'albero ) di una mossa ossia le varie possibili risposte legali dell'avversario. Se faccio una mossa apparentemente legale ma, per esempio, spostando un mio pezzo rendo possibile la cattura del mio Re da parte dell'avversario, faccio una mossa illegale che non risulta evidente usando la notazione ufficiale ( nel linguaggio tradizionale si dice che il pezzo è inchiodato ossia non lo posso spostare perché perderei il mio Re ) e se, per esempio, sposto la mia Regina e il mio avversario la può mangiare con un Pedone, faccio una mossa, con altissima probabilità, a meno che il sacrificio mi dia la possibilità di dare presto scacco matto, MOLTO STUPIDA ossia sarebbe una svista ma questo sarebbe evidente specificando le risposte dell'avversario più vantaggiose per l'avversario stesso e dunque le mosse che l'avversario farebbe con altissima probabilità.Bozza delle mie convenzioni di scrittura ( che spero definitive )La partita viene descritta da una alternanza di caratteri e di cifre
e userò una tabella per indicare quali codici
Unicode considero appunto caratteri MAIUSCOLI e caratteri minuscoli
e quali codici Unicode considero cifre ossia, ovviamente
quelle da 0 a 9 ma anche il segno
Vedere per esempio:
http://www.smartfeeling.org/unicode/Unicode.html oppure
https://it.wikipedia.org/wiki/Unicode
Ogni mossa è fatta da una stringa di due o tre caratteri e da un intero positivo o negativo che, di norma ha almeno 5 cifre decimali positive o di più ma può valere 0 o essere un numero negativo per indicare che la mossa è prevista ( e non preceduta da nessuna stringa ) ma non è ancora stata calcolata.
Se l'intero è zero vuol dire che quella
partita, una delle diramazioni possibili in risposta
alla mossa dell'altro giocatore, è ormai TERMINATA (
con la sconfitta di un giocatore o col pareggio ) ma comunque
bisogna segnalare la mossa non calcolata o terminata
per potere risalire all'antenato della mossa ( dato che la
ricostruzione delle mosse di una delle possibili partite
discendenti da una particolare disposizione iniziale dei pezzi viene
fatta partendo dall'ultima generazione e risalendo al padre,
al nonno, al bisnonno etc. ). Come nel
caso dell'intero negativo anche lo 0 non viene preceduto dalla stringa
che specifica la mossa dato che lo zero serve solo
come promemoria ma quella partita è finita
( magari da varie generazioni )
e dunque, ovviamente, nessun pezzo si può muovere.
La stringa che precede l'intero deve essere fatta di almeno due
caratteri o anche di tre se il pezzo che è stato mosso è
stato anche promosso ( come avviene nel gioco classico quando
un Pedone raggiunge il suo traguardo ) o ha perso
qualche sua facoltà di movimento. Dunque anche i Pedoni
vanno indicati per chiarire chi fa la mossa ossia il Bianco/Blu
se il carattere è maiuscolo e il Nero/Rosso
se il carattere è minuscolo. La non cattira va
indicata con una zeta minuscola se ha mosso il Bianco/Blu
e con una Zeta maiuscola se ha mosso il Nero/Rosso e questo
serve a rendere chiaro quale giocatore ha fatto la mossa.
Se poi il pezzo viene promosso bisogna indicare il tipo
di pezzo a cui viene promosso ossia Notare ( ribadisco ) che in base a queste regole si possono inserire caratteri bianchi a piacere o caratteri che non sono considerati simboli di pezzi e neppure cifre. Dunque per esempio la mossa di un Pedone Bianco/Blu che non fa catture si può indicare con una "Pz" oppure con una "P z" e se invece si è mosso, senza fare catture un pedone Nero/Rosso, la mossa si può indicare o con una "pZ" o con una "p Z" indifferentemente e se il pedone viene promosso a Regina ( Donna ) si scrive "p Z d" o "pZd" o "pZ d" etc.... Nel numero positivo che segue i caratteri non numerici sono inserite tre informazioni: quante risposte sono previste o consentite all'avversario ( risposte che verranno calcolate poi...), colonna e traversa iniziale del pezzo e colonna e traversa finale del pezzo. Dunque le cifre devono essere al minimo 5 ma ce ne possono essere anche 6, se all'avversario sono consentite dieci mosse e più fino a 99 e 7 se all'avversario sono consentite 100 mosse e più etc. Dunque, dato che le cifre vanno raggruppate in tre gruppi di cui il secondo e terzo gruppo è sempre fatto di una coppia di cifre ( la colonna e la traversa), è consentito interporre spazi bianchi anche tra le cifre. Per esempio, all'inizio della partita classica, se si muove di due traverse in avanti il pedone del Re Bianco/Blu si potrà scrivere "Pz995254" se si concedono all'avversario ben 99 mosse anche se, le mosse realmente fattibili in questo caso sono solo 20 ossia 16 avanzamenti degli 8 Pedoni e 4 modi di fare saltare i 2 cavalli... Ma indifferentemente si può scrivere in modo molto più comprensibile, "P z 99 52 54" evidenziando meglio i tre gruppi logici in cui va suddiviso l'intero. Nel caso di arrocco, lungo, da parte del bianco si scriverà "IzR995131" e nel caso di arrocco corto "IzR995171" interponendo a piacere spazi bianchi e facendo rilevare che l' Imperatore, facendo l'arrocco, diventa un semplice Re ossia perde, da quel momento in poi la facoltà di arroccare. Ovviamente esistono condizioni imposte all'arrocco ossia deve esserci una Fortezza e non una Torre in 11 per l'arrocco lungo o una Fortezza e non una Torre in 81 per l'arrocco corto. E poi ci sono altri vincoli che non sto qui ad elencare. Se si descrive una partita iniziale ma con a monte varie altre mosse ed un pedone bianco sta, per esempio in 54 e tocca al Nero/Rosso, bisogna precisare se lì ci è arrivato nel turno immediatamente prima ossia se è catturabile al passo o se sta lì già da vari precedenti turni del Bianco. Dunque scriverò "M 54" se è un Militare ossia è stato appena mosso o "P 54" se stà lì da vari altri turni... Mi sembra di avere considerato, con queste regole tutte le possibili situazioni... Per capire quale è il padre di una data mossa basta guardare la generazione precedente per distinguere i fratelli dai cugini. Tutti i figli di uno stesso padre sono elencati consecutivamente e dato che è noto il numero di figli di ogni padre, elencato tra i suoi cugini o fratelli ossia gli zii della mossa considerata, si calcola subito dove stanno i figli di ogni padre per cui non sono indispensabili eventuali separatori ma la discendenza ossia il padre di una data mossa è calcolabile senza ambiguità. Naturalmente, per chiarezza, potrebbe essere lecito usare un carattere speciale come separatore tra i vari gruppi di figli di uno stesso padre della generazione precedente ma... questo non è una regola inderogabile.... Conclusione momentaneaProverà a codificare in Javascript queste regole che vanno tradotte anche nella notazione puramente numerica che ho definito in precedenza e speriamo che non saltino fuori errori ed omissioni... |