Newsgroup: it.hobby.scacchi
Titolo: Programmatori aiuto! (C++ e Winboard)

Ho provato a fare un piccolo programmino per capire che
messaggi invia WinBoard. Ho scritto una cosa tipo:
char stringa[8];
cin >> stringa;
out << stringa;
dove out e' un file aperto prima.
Winboard mi manda i messaggini e nel file li ritrovo, pero' non riesco
ad intercettarli; Mi spiego, se faccio una cosa tipo
if (stringa == "e2e4") {out << "ok, ha mosso e2e4";}
Non succede niente. 
Ho il sospetto che le stringhe di Winboard siano un po' piu' `oscure' di
quello che pensavo....mi aiutate ?
N.B. Il C++ lo sto studiando adesso....predendo come spunto
la creazione di un motore scacchistico per imparare piu' velocemente.
Maurizio

 if (strcmp(stringa, "e2e4")==0) {out << "ok, ha mosso e2e4";}
Prova in questo modo e vedrai che funziona, ma se avessi ulteriori
problemi non esitare a chiedere! :-)
Ciao,
C.
--------------------------
 Carmelo Calzerano - Pisa
      ciccio su Fics
--------------------------

 > if (stringa == "e2e4") {out << "ok, ha mosso e2e4";}
    Concordo, ma sarebbe opportuno precisare che ci sono dettagli del
collegamento da non trascurare. Sono comunque riportati nelle spiegazioni
allegate a WinBoard (o meglio: che si trovano sul sito ufficiale). La
maggior parte riguardano problemi legati alla cache dell'i/o... ma qui
stiamo forse andando un po' OT. con un po' di tentativi, si trova facilmente
una soluzione. In Drago ho implementato un secondo thread, per gestire
l'input, dopo aver provato (senza successo) altre strade. questa soluzione
richiede però un po' di esperienza... e di incoscienza :-))))))
    Ciao!!!

 problemi non esitare a chiedere! :-)
Effettivamente sto studiando il C++ adesso per la prima volta.
E cosi' funziona! (Grazie)
Quindi questo vuol dire che tutte le volte che dovro' confrontare dei valori
(anche numerici) mi dovro' cercare funzioni che pescano i contenuti ?
:-(

Maurizio wrote:

Direi di no. prova il seguente programma (pero` siamo veramente molo OT):
comunque su it.comp.lang.c++ potrai trovare molti consigli sul c++.
#include <iostream>
using namespace std;
int main(void) {
    int a=2, b=2 ;
    int *pa=&a,*pb=&b;
    if(a == b) cout << "a e` uguale a b" << flush << endl;
    if(pa != pb) cout << "pa e` diverso da pb" << flush << endl;
    return 0;
}

 char stringa[8];
dici al compilatore:
- riserva 8 zone di memoria contigue, ciascuna di ampiezza tale
  da poter contenere un valore di tipo char;
- metti nella variabile 'stringa' l'indirizzo della prima di
  queste zone di memoria. 
A questo punto tu hai la possibilita' di accedere al *contenuto* di
queste 8 zone di memoria (cioe' di questi otto caratteri), riferendoti
a ciascuna di esse come 'stringa[0]', 'stringa[1]',... 'stringa[7]',
in quanto 'stringa[x]' significa (piu' o meno!:-)): "valore contenuto
all'indirizzo della x-esima locazione di memoria a partire dall'
indirizzo 'stringa'".
 
Usando semplicemente 'stringa' invece ti riferisci *all'indirizzo*
di 'stringa[0]'... Chiaro fin qui? :-)
 
Ora, la funzione strcmp() non fa nulla di eccezionale; puo' essere
implementata con due o tre righe di programma: non fa altro che
confrontare carattere per carattere le due stringhe passate come
argomento, il che e' proprio quello che desideravi... ma naturalmente
avresti potuto evitare di usare strcmp(), e confrontare invece "a
mano" (cioe' carattere per carattere) le due stringhe.
Insomma, non e' che ci siano funzioni che "magicamente" ti pescano
i contenuti... i contenuti sono a tua completa disposizione; esistono
semplicemente funzioni gia' belle e pronte che ti facilitano il
lavoro, implementando le piu' comuni operazioni di manipolazione
delle stringhe! :-)
Per quanto riguarda i valori numerici... se intendi stringhe di
caratteri numerici (ad esempio "12998", cosa *ben differente* dal
numero intero 12998), certo che hai bisogno di funzioni che te le
interpretano! Fare tutto a mano in questo caso e' semplicemente
assurdo :-))
Se invece ti riferisci a valori effettivamente numerici, tipo
quelli contenuti nelle variabili di tipo int, allora non hai
bisogno di particolari funzioni (tranne magari per calcolare
esponenziali, logaritmi, radici ecc.) Basta che stai attento alla
differenza fra variabili e puntatori, e tra valori ed indirizzi! :-))


Vi ringrazio tutti, a questo punto anche un pischello come me
ha capito per forza! :-)
Cmq secondo me non siamo proprio OT nel senso che 
prendendo come problema la programmazione di un engine
scacchistico ci si puo' avvicinare ad un linguaggio di programmazione.
E questo non e' OT perche' avvicina una cosa produttiva ad una cosa
come gli scacchi ed in definitiva arricchisce quest'ultimi.
Grazie di nuovo !
P.S. Esiste una qualche guida alla programmazione di chess engines 
in rete (adatta ai principianti magari.)

 quello che pensavo....mi aiutate ?
Credo che il problema non siano le stringhe di winboard ma quelle del C++.
Se dichiari "stringa" come "char" (in effetti "char *") e non come
"string" non puoi usare l'operatore "==" ma devi usare una funzione di
libreria del C che si chiama "strncmp" o qualcosa del genere (la trovi su
un qualsiasi manuale C). In sostanza il punto e' che se usi le stringhe
nello stile del C devi attenerti a tale stile che non prevede l'overload
di operatori.
Spero di avere ragione, in bocca al lupo,
Paolo Violini



Non so se tali guide possano esistere, cmq in commercio c'e' il libro:
"I giocatori artificiali" di Paolo Ciancarini che dovrebbe esserti
d'aiuto per i "primi passi" nella programmazione di chess engines.
Potresti inoltre scaricarti i sorgenti di GNU chess e studiarteli
(anche se per un principiante mi sa che saranno un po' ostici...) dal
sito 
ftp://ftp.oasi.gpa.it/pub/gnu/
 clickando su GNU chess.
Buon anno a tutti!
gianax
gianax
una posizione vinta non coincide necessariamente con una partita vinta...

 wrote in message
386643b4...@news.libero.it...

ci sono anche disponibili i sorgenti di Crafty
ma secondo me ambedue i programmi sono sconsigliabili da studiare per un
principiate.
Io consiglierei TSCP se lo vuoi maurizio mandami un email te lo spedisco
e un semplice programma fatto apposta per imparare.
al misterioso giamax volevo chiedere ... sei un programmatore? hai fatto un
programma?
se la risposta e' si potresti essere un ottimo candidato per aggregarti al
G.SeI
(Gruppo Scacchi e Informatica) il cui scopo unico e' preparare il terreno
all'avvento
di una engine italiana che faccia a pezzi sia crafty che gnuchess ;-)
ciao
gianluigi
ps. Maurizio ma te non eri di Prato?

di una engine italiana che faccia a pezzi sia crafty che gnuchess ;-)
ehehehe... we want YOU! :)
ormai per Gianluigi questa e' diventata una missione...
Ciao
--
   o   o
o / \ / \ o  Luca Dormio
  \ - - /    
ldo...@tin.it
 (real email address)
   =====
Chess.net ID: Luca_b3
FICS ID: LarsenB
IECG ID: 17105


ebbene si lo confesso ;-)
ciao
gianluigi

> ps. Maurizio ma te non eri di Prato?
Lo sono, perche'?
Cmq i problemi con le stringhe li ho risolti, ho usato la classe 
string del C++ e va magnificamente. Ora il problema e' creare
l'engine scacchistico vero e proprio....cioe' il lavoro piu' tosto.

 Lo sono, perche'?
 perche lo sono anch'io e siccome mi interesso di chess-engine da molto
tempo
e programmo in VB e C essendo tu di Galciana .. si aprono anche prospettive
del tipo ...
una telefonata oppure se ci vediamo ti puoi rendere conto (dal vivo) se tra
i libri che ho ce ne
e qualcuno che non resisterai ad andate alle 2torri a comprare ;-)
Addirittura potresti vedere dal vivo la fucina da cui uscira' il mitico
GOLEM 0.1 ;-)
a proposito non condivido tanto la tua scelta di usare la MFC che a me non
piace tanto.
In ogni caso se programmi una engine anche per imparare il C .... un po' di
esercizio sulle stringhe non avrebbe fatto del male.
ciao
gianluigi

 esercizio sulle stringhe non avrebbe fatto del male.
Ho provato nei due modi, sia usando un char[] cioe' vettoriale, sia usando
le stringhe. Per ora ho fatto un programma che gioca random, senza
neanche il controllo della legalita' .
Consigli su chess engines e/o programmazione in C e C++ sono i benvenuti.
Ma non vorrei farti perdere tempo....(ne sto gia' facendo perdere 
abbastanza a me stesso :-)))))


Ok. ma se decidi di implementare anche una funzioni che valuti le mosse e
hai bisogno di una mano non esitare a farmi un fischio.
buon lavoro :-)
ciao
gianluigi