Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Scacchi
Forum - C/C++ - Scacchi

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
chessmaster (Normal User)
Newbie


Messaggi: 10
Iscritto: 25/06/2011

Segnala al moderatore
Postato alle 10:58
Sabato, 25/06/2011
Vorrei implementare il gioco degli scacchi in C++.
Ho pensato di creare una classe astratta Pezzo e le varie classi Pedone, Torre, Cavallo, Alfiere, Re, Regina che la estendono.
Non so però come gestire la scacchiera...quali altre classi mi conviene utilizzare?

PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 13:30
Sabato, 25/06/2011
Potresti vedere la scacchiera come una semplice matrice di tipo int bidimensionale che contiene in ogni casella l'ID del pezzo presente (o 0 se libera)... Secondo me una classe per la scacchiera è superflua... che ne dici?

PM Quote
Avatar
chessmaster (Normal User)
Newbie


Messaggi: 10
Iscritto: 25/06/2011

Segnala al moderatore
Postato alle 14:14
Sabato, 25/06/2011
Beh ad esempio il metodo che verifica se un giocatore è sotto scacco dove lo metto se non nella classe scacchiera? Il turno (bianco o nero) idem.
Più che altro ero dubbioso sul fatto di che tipo scegliere per la matrice bidimensionale...la soluzione che proponi tu da quanto ho capito non sfrutta molto gli oggetti...

PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 16:12
Sabato, 25/06/2011
Beh... Io il metodo che verifica lo scacco lo porrei nell'oggetto giocatore come restituente un valore di tipo bool... Per quanto riguarda invece il turno, si è vero potresti metterlo in una classe scacchiera... Mah secondo me risulta superfluo sfruttare molto gli oggetti sulla scacchiera... Oltre il parametro di turno e di matrice cos'altro potrà avere... Per la matrice non va bene il tipo int dell'ID del pezzo?

PM Quote
Avatar
chessmaster (Normal User)
Newbie


Messaggi: 10
Iscritto: 25/06/2011

Segnala al moderatore
Postato alle 16:26
Sabato, 25/06/2011
Se faccio la matrice di int come hai proposto, poi non posso fare ad esempio matrice[2][6].muovi(...) perchè non è un oggetto ma un intero...tu nel dettaglio come implementeresti le mosse utilizzando la matrice di int?

PM Quote
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Segnala al moderatore
Postato alle 16:47
Sabato, 25/06/2011
Avevo implementato un gioco di scacchi in C quindi penso di poter dare una mano.
Utilizzi una matrice m[8][8] che contiene in caratteri i vari pezzi:

char m[8][8]={'T','C',...

Un'altra matrice che contiene le caselle e indica se sono vuote o piene:

char m2[8][8]={-1,-1,...0,0,...,1,1,...}

Dove -1 sta per una casella occupata da un pezzo nero, 0 una casella vuota, 1 da un pezzo bianco.

Ogni volta che il giocatore inserisce delle coordinate iniziali e finali (gestite direttamente con le matrici) si controlla se a quella coordinata c'è un pezzo tuo e non è vuota, dopo di ciò bisogna controllare per ogni pezzo (e qui è un po' noioso) se effettivamente può andare alle coordinate finali:

if(m[y][x]=='P')
   return controllo_pedone(cordinate...);
else ...

Se la funzione restituiva false vuol dire che può muoversi e allora disegni viceversa l'utente non può fare quella mossa e ripeti il ciclo.

Un'ulteriore accorgimento sarebbe quello di creare una variabile turno che viene inizializzata a -1 e ad ogni ciclo (turno appunto) viene moltiplicata per -1 quindi a questo rimando la seconda matrice.

Una volta finito i controlli per lo scacco non resta che scorrere tutta la matrice ed eseguire la funzione controllo_mossa() per ogni pezzo inserendo le coordinate iniziali del pezzo e le coordinate del re, se si può fare allora il re è sotto scacco perché esiste almeno un pezzo che può arrivare alle sue coordinate.

Spero di essermi spiegato decentemente dopo al massimo parliamo dello scacco matto che quello è un po' più complicato :)

PM Quote
Avatar
chessmaster (Normal User)
Newbie


Messaggi: 10
Iscritto: 25/06/2011

Segnala al moderatore
Postato alle 17:03
Sabato, 25/06/2011
Grazie delle indicazioni ma io volevo farlo in C++ per poter programmare ad oggetti...la tua proposta è completamente senza l'uso degli oggetti :(

PM Quote
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Segnala al moderatore
Postato alle 17:04
Sabato, 25/06/2011
Beh io ti ho elencato una serie di funzioni se vuoi mettile in una classe ma non vedo il bisogno di oggetti in questo caso...

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 12:21
Domenica, 26/06/2011
Testo quotato

Postato originariamente da comina8:

Beh io ti ho elencato una serie di funzioni se vuoi mettile in una classe ma non vedo il bisogno di oggetti in questo caso...



Uno abituato alla programmazione puramente imperativa non può vedere il bisogno di oggetti. Io al contrario li userei anche per lavarmi i denti XD

Comunque ha ragione chessmaster. La classe scacchiera è molto utile, tanto più che ogni concetto deve essere astratto da una classe: non potete programmare i pezzi e i giocatori usando oggetti e il campo di gioco con una semplice matrice. Questa matrice esisterà, certo, ma sarà inglobata in una opportuna astrazione. Inoltre entrambi i giocatori hanno bisogno di sapere la situazione di gioco e per questo devono riferirsi alla scacchiera.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo