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?
> 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 ;-)
Segnalo che il primo post su IHS di cui non ho capito assolutamente nulla...
> Segnalo che il primo post su IHS di cui non ho capito assolutamente nulla... > 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
> > Segnalo che il primo post su IHS di cui non ho capito assolutamente nulla...
> > 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?
Ora è chiaro, però bisogna anche considerare l'effetto impresso con la stecca ai pezzi...
> Tra le mosse del nero che devo valutare posso escludere a priori l'arrocco e > la presa al varco. > Giusto?
Beh, sì. Non ti può catturare con l'arrocco perché ciò presupporrebbe che il tuo Re sia accanto al suo, il che è illegale (sono entrambi in presa!!). Nella presa al varco invece, il pedone preso al varco dovrebbe saltare il Re (!!!) il che è ovviamente impossibile!!
> 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?
> Ciao a tutti. > Ho ancora bisogno del vostro aiuto ;-)
Una premessa: hai scritto un casotto.
> 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,
Giusto, se per "scacchiera" intendi "posizione sulla scacchiera". E potevi fermarti qui.
> ossia nessuna mossa del nero che > abbia come casa terminale quella nella quale si trova il re bianco.
Qui gia' entri in confusione. Giusto, se per "casa terminale di una mossa" intendi la casa di arrivo di uno qualsiasi dei pezzi neri.
> Tra le mosse del nero che devo valutare posso escludere a priori l'arrocco e > la presa al varco. > Giusto?
Ma perche' ti arrovelli? Basta solo che il re bianco al termine della mossa non sia in presa. Se proprio vuoi seguire la tua logica, comunque, quello che dici e' giusto. Ad esempio nella posizione in cui oltre al Re Bianco sono presenti solo il Re Nero in e8 e la Torre Nera in a8, il bianco non puo' muovere Rc8, e non occorre valutare le conseguenze di un eventuale successivo arrocco lungo del Nero (?!?) per escludere tale mossa.
> 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?
Sempre seguendo la tua logica, e' giusto. Il problema pero' non si pone, perche' (Caissa mi perdoni...) se ad esempio il Nero puo' mangiare il Re Bianco con l'alfiere, ma l'alfiere sta coprendo il proprio Re dallo scacco della Torre Bianca, non ha senso stabilire se la mossa di Alfiere e' lecita perche' siamo gia' in una situazione illecita: il Re Bianco e' sotto scacco con mossa al Nero, quindi o e' matto o c'e' qualcosa che non va nella mossa bianca precedente.
> Spero di essere stato abbastanza chiaro ;-)
No, ma lo sarai sicuramente la prossima volta. :)
Ciao, Bruno.
--
questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it
> Giusto, se per "casa terminale di una mossa" > 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).
Ciao, Bruno.
--
questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it
On Thu, 15 Jul 2004 08:34:59 GMT, "hz99" <hz...@hzx99.com> wrote: >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?
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 ... :-)
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...
> Ma perche' ti arrovelli? Basta solo che il re bianco al termine della > mossa non sia in presa. Se proprio vuoi seguire la tua logica, comunque, > quello che dici e' giusto.
Non è proprio una sua logica, è quello che deve sapere per esempio un programma che genera le mosse legali :)
> Beh, sì. Non ti può catturare con l'arrocco perché ciò presupporrebbe che il > tuo Re sia accanto al suo, il che è illegale (sono entrambi in presa!!).
OK. Più in generale perchè non si può mai catturare con l'arrocco perchè una delle condizioni dell'arrocco è che: - Fra il Re e la Torre non ci devono essere altri pezzi, né amici né avversari ( http://scacchi.qnet.it/manuale/arrocco.htm )
> Nella presa al varco invece, il pedone preso al varco dovrebbe saltare il Re > (!!!) il che è ovviamente impossibile!!
OK. Più in generale perchè con una presa al varco si cattura solo ed esclusivamente un pedone.
> > 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?
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
> Bruno Rizzuti ha scritto: > > Giusto, se per "casa terminale di una mossa" > > 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).
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)
> >Secondo me la cosa piu' semplice e' partire dal re bianco (supponendo > >che tocchi al bianco)
> <snip>
> 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?
> 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.
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.
On Thu, 15 Jul 2004 14:50:17 +0000 (UTC), "Roberto Montaruli"
<rmontar...@yahoo.com> wrote: >> 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?
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...
> Devo specificare una partita di scacchi utilizzando dei metodi formali. > 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.
Ciao, Bruno.
--
questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it