Newsgroup: it.hobby.scacchi
Titolo: Verifica di uno scacco potenziale

Ciao a tutti.
Ho ancora bisogno del vostro aiuto ;-)
Sia data una scacchiera e un colore "di turno" ossia di chi deve muovere
Consideriamo ad esempio che il colore di turno sia il bianco.
Per valutare la leicità di una mossa del bianco devo verificare che nella
(eventuale)
scacchiera risultante non ci sia nessuna possibile mossa del nero che
(virtualmente) possa mangiare il re bianco, ossia nessuna mossa del nero che
abbia come casa terminale quella nella quale si trova il re bianco.
Tra le mosse del nero che devo valutare posso escludere a priori l'arrocco e
la presa al varco.
Giusto?
Tenendo in considerazione che il turno è bianco: tra le mosse del nero che
(virtualmente) mangerebbero il re bianco (se il bianco facesse quella
mossa), e che devo quindi tenere in considerazione, ce ne sono anche alcune
che se il turno fosse nero sarebbero considerate illecite (perchè
lascerebbero il re nero sotto scacco) ma che in questa situazione vanno
considerate "come lecite" (perchè se fatte "mangerebbero" il re bianco e la
partita sarebbe finita prima che il bianco possa mangiare il re nero
lasciato sotto scacco).
Giusto?
Spero di essere stato abbastanza chiaro ;-)
Grazie.
Ciao!

 ha scritto nel messaggio
news:TkrJc.4219$OR2.2...@news3.tin.it...

Segnalo che il primo post su IHS di cui non ho capito assolutamente nulla...
Luigi Caselli

 Luigi Caselli
Maestro...praticamente il ragazzo diceva che seguendo le coordinate
dell'alfiere campociaro bianco sulla parallasse del Re nero il seguente
scacco di scoperta in ottava lato donna doveva essere secondo lui in
rinterzo ma dubitava che ci potesse essere anche una variante a due sponde.
Chiaro ora?
talete radics
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Chiaro ora?
Ora è chiaro, però bisogna anche considerare l'effetto impresso con la
stecca ai pezzi...
Luigi Caselli

 Spero di essere stato abbastanza chiaro ;-)
E' tutto chiaro e tutto corretto.
Alex

 Giusto?
Giusto. (Anche se il Re non si cattura mai)
--
[IHS] Mario Sacchi - Società Scacchistica Novarese
http://anzwers.org/free/ssn/soci/sacchi.htm
[ICGSH] Mariov - Hendrix Team - IV.18 - 234909
[IHG] 
http://www.quattrostelle.it/giorgia/IHG/scheda.asp?anagrafica=100

 Spero di essere stato abbastanza chiaro ;-)
No, ma lo sarai sicuramente la prossima volta. :)
Ciao, Bruno.


 intendi la casa di arrivo di uno qualsiasi dei pezzi neri. 
Casa di arrivo relativa alla cattura, beninteso, altrimenti sembrerebbe
che tu escluda che il Re possa bloccare un pedone ponendosi davanti a
questo (il distinguo va fatto perche', notoriamente, la casa di arrivo di
un pedone a seguito di una cattura non coincide con la casa di arrivo in
una mossa "normale", ossia senza cattura).


Giusto?
Tanto la presa en passant quanto l'arrocco possono catturare il re
solo se la posizione č illegale.
Esempi:
B Pc4 Rc3
N Pd4
.. d:c3 cattura il re.
Perň non solo questo er sotto scacco, ma come hai fatto a spingere in
c4?
B Rf8
N Re8 Th8
.. O-O cattura il re.
Considerazioni simili.
Quindi testare quelle mosse č superfluo.
Spero che il tuo codice sia piů comprensibile del testo che hai
postato ... :-)

 Spero di essere stato abbastanza chiaro ;-)
Come la luna nuova in una notte di nebbia :-)
Se ho ben capito stai cercando di ottimizzare un algoritmo di generatore
di mosse.
Secondo me la cosa piu' semplice e' partire dal re bianco (supponendo
che tocchi al bianco)
e per determinare se il re sia sotto scacco, invece di partire dai pezzi
neri parti dal re bianco e verifica se c'e':
un alfiere o una donna avversaria lungo le diagonali (fino ad un
ostacolo)
una torre o una donna avversaria lungo le ortogonali (fino ad un
ostacolo)
un cavallo a salto di cavallo
un pedone nelle due case diagonali davanti al re (quelle da dove un
pedone minaccerebbe il re).
Se c'e' questa condizione, il re e' sotto scacco, altrimenti no.
Nel momento in cui il re si trova sotto scacco, l'insieme delle mosse
legali possibili e' limitato a quelle che eliminano la condizione di
scacco.
Se non esistono queste mosse, allora lo scacco e' matto.
Se tu spiegassi in dettaglio quello che stai cercando di fare, invece di
dilungarti in astrusi discorsi astratti, forse ci riusciamo ad intendere
un po' meglio...
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 quello che dici e' giusto.
Non è proprio una sua logica, è quello che deve sapere per esempio un
programma che genera le mosse legali :)
Alex

 Per valutare la leicità di una mossa
la che ?
per il resto e' tutto chiaro ...
Robynet

 Per valutare la leicità di una mossa
la che ?


 Per valutare la leicità di una mossa
la che ?  :)


 No, ma lo sarai sicuramente la prossima volta. :)
Ce la metterň tutta :)
Grazie mille!
Ciao

 Giusto. (Anche se il Re non si cattura mai)
OK.
Grazie
Ciao!

 per il resto e' tutto chiaro ...
e purtroppo non è un errore di battitura.
Ero in dubbio tra leicità e lecità (a dire il vero lecità mi suonava un po'
strano) e allora via di Google
http://www.google.it/search?sourceid=navclient&hl=it&q=leicit%E0
 che
fornisce come primo risultato il titolo di una tesi: Leicità della
contenzione a letto dei malati psichiatrici.
quindi ho dato per buona la correttezza della parola (se è pure nel titolo
di una tesi!)
Prometto: in futuro mi fiderò solo di 
http://www.demauroparavia.it
Non legatemi al letto ... :-)
Ciao!

 una mossa "normale", ossia senza cattura).
Giusto!
Grazie per le risposte.
Ciao

 programma che genera le mosse legali :)
Infatti ...
Ciao!

che tocchi al bianco)
<snip>
Nessuno fa così: è logico, ma molto poco performante.

 Infatti ...
Ecco. Se la velocità di elaborazione non è per te un problema, nel senso che
non devi analizzare milioni di posizioni al secondo, allora c'è un approccio
molto più semlice per verificare la legalità di tutte le mosse, senza
controlli sulle case attaccate: 1) generi tutte le mosse possibili,
ignorando le catture e le lasciate in presa dei Re (si chiamano mosse
pseduolgali); 2) prendi ciascuna di queste mosse, la esegui, e dalla
posizione risultante generi tutte le mosse pseudolegali; 3) prendi ciascuna
di queste mosse, la esegui, e se nella posizione risultante ci sono entrambi
i Re, la mossa in esame (quella del punto 2), era legale, altrimenti da
scartare. Scritto in pseudo-codice è ancora più chiaro:
generamossepseudolegali
for(x=tuttelemosse){
  eseguimossa(x)
  generamossepseudolegali
  for(y=tuttelemosse){
    eseguimossa(y)
    if(ci sono i due Re){
      trovatamossa(x)
    }
    ritiramossa(y)
  }
  ritiramossa(x)
}
Alex

 Nessuno fa cosě: č logico, ma molto poco performante.
So che le ultime tecnologie si basano su degli array di bit(8x8) e
vengono fatte delle mascherature binarie (AND OR XOR) tra i vari array,
pero' non ho mai approfondito la cosa.
E comunque se l'amico non ci spiega che cosa sta facendo esattamente, e'
dura indovinare.
Tu come la verificheresti una situazione di scacco, a partire da un FEN
per esempio?


 dura indovinare.
Devo specificare una partita di scacchi utilizzando dei metodi formali.
Ciò effettivamente equivale a definire un generatore di mosse.
In pratica sto specificando le regole degli scacchi utilizzando una
notazione basata sulla teoria degli insiemi e sulla logica matematica ... e
ti assicuro che il risultato è molto più comprensibile dei miei post :-)
So che il mio dubbio è (era) banale ma non avendo mai giocato una partita di
scacchi (ho solo guardato qualche partita su Internet) avevo bisogno di una
conferma prima di procedere con la specifica.
Grazie
Ciao!

per esempio?
La scriverei come hai detto tu grosso modo, visto che si tratterebbe
di farlo per una sola posizione.
Nei programmi di gioco invece molti calcoli sono esasperati, pensa che
alcuni programmi non testano le promozioni minori in base alla
convinzione che con quei cicli macchina vinceranno piů partite che non
vincendo le posizioni in cui serve una promozione minore...

 Ciň effettivamente equivale a definire un generatore di mosse.
Una domanda della serie "come evitare di inventare la ruota due volte":
hai gia' dato un'occhiata alla letteratura esistente? Perche' di algoritmi
possibili possono esisterne tanti (vedi per esempio quello proposto da
Alex), ma alcuni sono decisamente molto piu' efficienti di altri...
Potresti cominciare dando un'occhiata a "I Giocatori Artificiali" di Paolo
Ciancarini, Mursia, un libro ormai datato ma decisamente sempre buono.


 ha scritto nel messaggio
news:LUuJc.2318$5D1....@news4.tin.it...

ci mancherebbe :)
pero' ti diro' che secondo me la parola giusta e' :
" liceita' ", intesa come qualcosa di lecito ; almeno, credo fosse questo il
senso che tu gli volevi dare.
ciao
Robynet


Be, siccome la cosa credo possa interessare a molti qui dentro (gran 
parte lavora nell'ambito dell'informatica), e a me in particolare questa 
cosa incuriosisce, se puoi inviare man mano che definisci le cose, cosi' 
eventualmente possiamo verificare che le tue definizioni siano 
effettivamente corrette.

 effettivamente corrette.
Per motivi che non vi sto a spiegare preferirei inviarvi il tutto una volta
completato.
Prometto comunque che terminato il lavoro renderò pubblicamente disponibile
il file delle difinizioni.
Ciao!

conferma prima di procedere con la specifica.
se deve specificare un generatore di mosse
con un metodo formale come pert esempio Z,
allora può essere utile avere presente un
programma scritto in Prolog,
disponibile per esempio in
http://familie-ostermann.de/Martin/chess/
(Google ne fornisce molti altri)
Anche il libro di Bratko su Prolog programming
contiene un esempio di generatore di mosse in Prolog.
Prolog e' basato su logica e su manipolazione di liste,
quindi la sua traduzione in Z e' semplice.
-- 
Prof. Paolo Ciancarini - Univ. of Bologna.
Director of Studies in Internet Sciences
e-mail: 
cianc...@cs.unibo.it
 
http://www.cs.unibo.it/~cianca/
-- 
Prof. Paolo Ciancarini - Univ. of Bologna.
Director of Studies in Internet Sciences
e-mail: 
cianc...@cs.unibo.it
 
http://www.cs.unibo.it/~cianca/