// Gioco degli scacchi (win32/linux)
// by Rand
// 27 / 03 / 2007 - adattato da Oligoatria a classe per il progetto GLWorld
#ifndef SCACCHI_H
#define SCACCHI_H
#define a 1
#define b 2
#define c 3
#define d 4
#define e 5
#define f 6
#define g 7
#define h 8
#define bianco 0
#define nero 1
#define vuoto 0
#define bre 1
#define bdon 2
#define balf 3
#define bcav 4
#define btor 5
#define bped 6
#define nre 7
#define ndon 8
#define nalf 9
#define ncav 10
#define ntor 11
#define nped 12
class RandScacchi
{
public:
RandScacchi();
void main_scacchi(); // restituisce la mossa del computer in (mossa)
short int scac[10][10]; //LA prime e ultime righe e colonne sono inutilizzate. C'è un bordo di caselle in più per evitare l'errore di segmentation fault in certi punti del programma.
char MiaMossa[4]; // lettera,numero - lettera,numero
void sceglimossa (unsigned int m);
void calcolamosse (short int modo); //se modo=1 trova tutte le mosse di una posizione lasciandole nell'array globale possibili. Se modo=0 comincia una ricorsione indiretta con sceglimossa per trovare la mossa migliore.
short int controllo(unsigned int m); //Questa funzione è usata da acquisisci. COntrollo torna 0 se la mossa dell'utente non è accettabile.
short int controlloMossa(unsigned int m); //Uguale dalla precedente, ma controlla che la mossa sia possibile senza guardare il tipo di pezzo
unsigned int possibili[100]; //array usato in fase di controllo di mossa dell'utente. Contiene tutte le mosse possibili di una posizione.
void modifica(unsigned int m); //accetta in ingresso una mossa ed esegue la mossa sulla scacchiera globale scac[][].
void cambiacolore();
int vincitore(); //capisce se la partita è terminata (re catturato) dichiara il vincitore all'utente.
short int livello; //è la profondità masima di analisi
bool CompMossaScelta;
int mossa;
private:
void raccogli(unsigned int m); // CON O SENZA ARGOMENTO? //si occupa raccogliere le mosse prodotte da calcolamosse quando modo=1 riempendo l'array possibili.
void inizializza(); //prepara le variabili globali per l'inizio della ricorsione fra calcolamosse e sceglimossa
void stampam(unsigned int m); //accetta in ingresso una mossa e la stampa in formato: lettera,numero-lettera,numero.
void stampap(); //disegna la scacchiera globale scac e la relativa posizione dei pezzi sullo schermo.
unsigned int acquisisci(); //chiede all'utente di inserire una mossa in formato lettera,numero-lettera,numero e la traduce in formato unsigned int
void apertura(); //inizializza l'array ap con le aperture (prime mosse di una partita di scacchi).
void apri(short int colore_utente); //A seconda che il computer giochi col bianco o col nero, apri sceglie una delle aperture contenute nell'array ap e la esegue. (gestisce le prime 2 mosse dela partita)
void posiniz(); //Dispone i pezzi in posizione iniziale sulla scacchiera.
short int mossaimposs (unsigned int m); //accetta una mossa in ingresso da calcolamosse, torna 0 o 1 se la mossa è accettabile, 2 se non lo è.
unsigned int mossa_giocata,mossa_in_analisi;
short int col_prof; //colore profondità.
short int nmossa; //numero di mossa: viene incrementato ad ogni mossa compita dall'tente o dal computer.
float effe; //effetto: è una variabile usata in fase di analisi della posizione.rappresenta l'effetto di una certa mossa (cattura di un pezzo, promozione di un pedone ecc.)
short int prof; //profondità. é la profondità di analisi della posizione.
float ramo[7]; //array usato in fase di analisi.
unsigned int ap[2][4][2]; //contiene le prime 2 mosse della partita già preparate.
int cont; //è il contatore di possibili.
int vincitore_;
};
#endif /* SCACCHI_H */