Questa versione ha scopo didattico nel senso che spiega un po' prolissamente il perché delle scelte in modo da suggerirle anche a chi volesse programmare in un linguaggio diverso da quello usato qui. ♔ ♕ ♖ ♗ ♘ ♙ ♚Innanzi tutto spiego il perché ho usato i codici che ho usato per individuare i pezzi: per sfruttare l'operatore
Questa regola generale ha perņ qualche importante eccezione ossia 0 rappresenta la cella vuota per cui il resto 0 della operazione%
che fornisce il resto della divisione diviso per un altro intero. Se scrivo17%5
il risultato che ottegno è 2 perché 17 diviso 5 dà 3 con resto 2. Dunque il tipo del codice lo riconosco con l'operazionecodicepezzo%5
dove il resto 0 individua la donna, il resto 1 individua la torre, il resto 2 individua l'alfiere, il resto 3 individua il cavallo e il resto 4 individua il pedone.0%5
non è una donna ma appunto indica il vuoto.Il codice 50 rappresenta uno spettatore ossia una cella vuota ma inaccessibile. Questo tipo di codice mi serve perché uso non una scacchiera di 8 righe ed 8 colonne.... ma una operativa di 16 righe e 16 colonne in cui ho annegato la scacchiera vera. In questo modo non debbo controllare gli sconfinamenti ossia se un cavallo si trova in una cella di bordo potrebbe saltare fuori della scacchiera vera ma saltando in un punto della scacchiera operativa trova un pezzo di codice 50 che non è né carne né pesce e dunque... il cavallo non esce dalla scacchiera vera.
Tutti i pezzi bianchi che rappresento col colore blu hanno codici inferiori a 50 mentre tutti i pezzi neri che rappresento col colore rosso hanno codici superiori a 50 ed ovviamente inferiori a 100 perché voglio usare codici di non più di due cifre decimali ( per ragioni grafiche se faccio stampe grezze senza usare i caratteri Unicode )Altra importantissima eccezione sono i codici 4 e 54 che non rappresentano un pedone pur avendo resto 4 ma rappresentano il 4 il re blu e il 54 il re rosso.
Notare che ai pedoni ho dato questo tipo di codice perché quando arrivano al traguardo ( riga 1 per i blu ed 8 per i rossi... numero le righe dall'alto in basso e non come si fa tradizionalmente ) debbono essere promossi e diventano donne se il loro codice è incrementato di 1, torri se incrementato di 2, alfieri se incrementato di 3 e cavalli se incrementato di 4. Con questo trucco garantisco il fatto che tutti i pezzi in gioco hanno sempre codici diversi e dunque è facile e inequivoco fare la storia dei loro spostamenti sulla scacchiera, mossa dopo mossa.Altra importantissima eccezione sono i codici 49 e 99 che non potrebbero essere considerati pedoni perché incrementati di 1, 2 3 o 4 quando promossi cambierebbero colore se 49 o darebbero sconfinamento se 99. Questi due codici li uso per riconoscere i pezzi che non sono mai stati mossi dall'inizio della partita perché la regola degli scacchi consente l'arrocco se e solo se il re e la torre con cui arrocca non sono mai stati mossi dall'inizio della partita. All'inizio della partita il re rosso deve stare nella cella 15 ossia prima riga e quinta colonna contando le righe dal'alto verso il basso per semplificare la stampa della scacchiera, mentre il re blu sta nella cella 85 ossia nell'ottava riga e quinta colonna e le torri rosse stanno in 11 e 18 mentre le torri blu stanno in 81 ed 88. Se dunque sulla scacchiera segno il codice 49 nella cella 85 vuol dire che lì sta il re blu mai mosso mentre se segno 49 ma sono nella cella 81 vuol dire che lì sta la torre blu mai mossa mentre se sono nella cella 88 trovo l'altra torre mai mossa. Appena perņ muovo un pezzo gli assegno il suo vero codice e non il codice dedotto dalla sua posizione ad inizio partita.
⚽ma che palle 'sti scacchi ! ( versione del 6 dicembre 2012 )Giocando ottusamente senza visione del futuro...
Ora dovrebbe saper fare anche le mosse insolite: l'arrocco, la cattura al passo e la promozione dei pedoni arrivati al traguardo.ma rispettando le regole
Per iniziare... |
bisogna scegliere la partitaOtto opzioni disponibili |
Promemoria: come funziona questa pagina e come fare le catture al volo e gli arrocchi.
Una mossa è un vettore fatto da terne di info in questo modo:Ora ho realizzato le due funzioni che servono a creare le mosse derivanti dalla cattura al passo e dell'arrocco ed una funzione che suppongo piuttosto utile per fare esperimenti con questa pagina HTML: mostra come scrivere la function javascript che consente di effettuare studi di particolari disposizioni di pezzi.
- La prima terna ossia il primo movimento è atipico perché serve a gestire la mossa nel suo complesso.
- Non ancora definito: contiene uno 0 e servirà quando applicherò l'algoritmo MiniMax ( vedere http://it.wikipedia.org/wiki/Minimax ).
- Non ancora definito: contiene una stringa
"("
.- Memorizza la stima del valore complessivo della mossa fatta da 3, 4 o 5 movimenti.
- Ciascun movimento è una terna di dati ossia:
Questa struttura dei dati ha il seguente scopo : permettere di andare nei due versi del tempo ossia, constatata la qualità di una sequenza di mosse... poter tornare indietro per poterne valutare altre. I movimenti dunque consentono di annullare una mossa per studiarne un'altra...
- Nome dell'oggetto creato in una data cella della scacchiera.
- Nome dell'oggetto cancellato in una data cella della scacchiera.
- Indirizzo della cella della scacchiera nel vettore che la rappresenta. La scacchiera classica degli scacchi è fatta da
8*8 = 64
celle ma la scacchiera classica è annegata in un vettore di almeno 256 elementi che rappresenta la scacchiera operativa e contiene informazioni di gestione.- Una mossa normale contiene tre movimenti ossia il movimento della cella da cui parte il pezzo degli scacchi e il movimento della cella in cui viene messo il pezzo spostato. Nella cella di arrivo può esserci un pezzo avversario che viene mangiato.
Il terzo movimento è speciale ossia consiste nel modificare l'elemento 1 della scacchiera ampliata. Di norma in questa scacchiera ausiliaria fatta da un solo scacco viene messo il vuoto ma se la mossa consiste nel doppio passo di un pedone viene messo l'indirizzo di arrivo del pedone.Questo consente all'avversario di fare la cattura al passo se ha un pedone a fianco del pedone che ha appena fatto il doppio passo.- Nella cattura al passo i movimenti sono quattro perché ai due movimenti classici va aggiunto il movimento che cancella il pedone avversario che ha appena fatto un doppio passo, lecito solo la prima volta che viene spostato e naturalmente c'è il movimento che mette il vuoto nello scacco della scacchiera ausiliaria ossia la cella 1 del vettore della scacchiera ampliata.
- Negli arrocchi i movimenti sono cinque ossia la coppia di spostamenti classici della torre dalla cella iniziale alla cella a fianco del re mai mosso e la coppia di movimenti del re che parte da dove sta e salta all'altro fianco della torre che è stata ora messa al suo fianco.
Infine c'è il solito movimento che mette il vuoto nello scacco della scacchiera ausiliaria.Ovviamente è ammesso fare un solo arrocco per giocatore e con ben precisi vincoli ossia in determinate condizioni.L'arrocco è lecito solo se la torre ed il re che lo fanno non sono mai stati mossi da inizio partita... e ci sono vari altri vincoli ben noti a chi sa giocare a scacchi ma che non ripeto ora.Dunque ora entriamo nel vivo dell'attività ossia nello studio di come migliorare la qualità del gioco suggerito dal programma. Come obbiettivo già raggiunto c'è il fatto che questa pagina serve, almeno ad aiutare un giocatore principiante che potrebbe fare involontariamente mosse illegali.
Oltre a questo, l'intero documento potrebbe servire come suggerimento a programmatori esperti ossia come punto di partenza per realizzare programmi che giocano a scacchi auspicabilmente in modo molto migliore di come sa giocare questa pagina di scacchi somari..
scacchi-esempio.txt deve contenere la funzione esempio9() usata come funzione esterna per studiare casi diversi da quelli del menù di base
Un esempio di come va scritta la funzioneesempio9()
è il seguente:function esempio9(){ mettoblu(scacchiera,xre,32); mettoblu(scacchiera,xalfiere,57); mettoblu(scacchiera,xalfiere,43); mettorosso(scacchiera,xre,11); vedo(101,centerhtm(h2htm("Caso 9"))); }
La libreria del gioco degli scacchi è riportata dopo l'immagine qui a lato...