frasck (Normal User)
Newbie
Messaggi: 8
Iscritto: 01/03/2009
|
ma che importa lo standard,prima ho scritto la regola per giocare,a me serve un modo per creare la scacchiera e principalmente inserire la pedina all'interno alternativamente ...tutto qua!!!
|
|
gigisoft (Member)
Guru
Messaggi: 696
Iscritto: 11/10/2008
|
Postato originariamente da frasck:
ma che importa lo standard,prima ho scritto la regola per giocare,a me serve un modo per creare la scacchiera e principalmente inserire la pedina all'interno alternativamente ...tutto qua!!! |
Beh... in effetti e' vero, non ha molta importanza, comunque se ho capito bene e' lo stesso modo in cui venivano disposte le palline nel videogame "Puzzle Bobble", mi sono spesso chiesto come venisse rappresentato all'interno.
Io penso comunque, poiche' la scacchiera e' fissa e di pochi elementi, che ti convenga rappresentarla semplicemente come un array e creare manualmente la corrispondenza "Elemento - Coordinate" inserendo in ogni elemento 6 puntatori alle caselle adiacenti.
Luigi |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da gigisoft:
Beh... in effetti e' vero, non ha molta importanza |
E allora diciamo che NON mi sono spiegato ...
Se si trova un gioco con una scacchiera SIMILE a questa, si puo' cercare di capire COME sono rappresentate le coordinate di QUEL gioco e usare la STESSA rappresentazione in questa ... non mi pareva una cosa complessa da comprendere ...
In ogni caso, penso che il miglior modo sia quello di usare in memoria un semplice "vettore" e numerare le celle dall'alto in basso e da sinistra a destra con un valore intero che parta da 0 e arrivi al massimo-1 di celle. Sapendo quante celle ci sono per ogni riga, diventa semplice per una funzione a cui si passa l'indice, determinare l'effettiva cella da trattare. |
|
gigisoft (Member)
Guru
Messaggi: 696
Iscritto: 11/10/2008
|
In ogni caso, penso che il miglior modo sia quello di usare in memoria un semplice "vettore" e numerare le celle dall'alto in basso e da sinistra a destra con un valore intero che parta da 0 e arrivi al massimo-1 di celle. Sapendo quante celle ci sono per ogni riga, diventa semplice per una funzione a cui si passa l'indice, determinare l'effettiva cella da trattare. |
in generale hai ragione, ma nel caso specifico, in cui la scacchiera e' fissa e di piccole dimensioni, secondo me non conviene inserire tanti calcoli per individuare le caselle (per non parlare delle adiacenze) per cui quella della corrispondenza manuale e dei puntatori mi sembra comunque la soluzione piu' indicata.
Luigi |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
La corrispondenza non la farei con calcoli complessi ma semplicemente con un paio di semplici tabelle precaricate con le coordinate x e y.
Ad esempio
int scacchiera[MAXCELLE];
int posx[MAXCELLE], posy[MAXCELLE];
in cui scacchiera rappresenta il suo contenuto e posx, posy le coordinate dell'elemento passato come indice (0..MAXCELLE-1)
|
|
frasck (Normal User)
Newbie
Messaggi: 8
Iscritto: 01/03/2009
|
Il problema č che la scacchiera non puo essere una semplice matrice con coordinate i,j,percheč ogni casella della scacchiera non č un quadrato ma un esagono...nn so se si riesce a veder nel codice che ho postato prima...il miio problema č quello ....
|
|
gigisoft (Member)
Guru
Messaggi: 696
Iscritto: 11/10/2008
|
Postato originariamente da theprogrammer:
La corrispondenza non la farei con calcoli complessi ma semplicemente con un paio di semplici tabelle precaricate con le coordinate x e y.
Ad esempio
int scacchiera[MAXCELLE];
int posx[MAXCELLE], posy[MAXCELLE];
in cui scacchiera rappresenta il suo contenuto e posx, posy le coordinate dell'elemento passato come indice (0..MAXCELLE-1)
|
Beh... questo comunque rende difficile il problema delle adiacenze, io proponevo la rappresentazione delle caselle tramite una struttura che contenesse:
Codice sorgente - presumibilmente C/C++ |
struct Casella{
int x, y; // coordinate dove la casella va disegnata
Casella *c[6]; // caselle adiacenti
/* altri eventuali campi che servono per il gioco */
}
|
mi sembra adatto al problema, e neanche troppo difficile da gestire.
Luigi
Ultima modifica effettuata da gigisoft il 03/03/2009 alle 15:56 |
|
gioser (Normal User)
Pro
Messaggi: 111
Iscritto: 03/10/2008
|
Secondo me theprogrammer ha ragione...
e' sufficiente una matrice quadrata per rappresentare la scacchiera
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
con
00 come vertice in alto
30 vertice a sinistra
03 vertice a destra
33 vertice in basso
le regole per le caselle adiacenti sono molto semplici:
data una cella di coordinate ij, le celle adiacenti sono:
i-1, j
i+1, j
i, j-1
i, j+1
i-1, j-1
i+1, j+1
provate a pensarci ...
|
|