Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Na vi che si incrociano nella battaglia navale in C
Forum - C/C++ - Na vi che si incrociano nella battaglia navale in C

Avatar
Alby_c84 (Normal User)
Newbie


Messaggi: 2
Iscritto: 06/01/2010

Segnala al moderatore
Postato alle 13:04
Mercoledì, 06/01/2010
Ciao a tutti...I need a little help...
sto programmando la battaglia navale in C come compito di fine corso all'uni ma mi sono bloccato perchè mi si incrociano le navi.
In pratica ho dichiarato una struttura struct Ship, generale per ogni nave con campi lenght, x e y (coordinate del punto di partenza della nave) e direction (0= orizz e 1= vert) e un puntatore a tale struttura. Poi ho dichiarato una struttura Player (contenente come campi struct Ship portaerei, struct Ship corazzata ecccc) e due variabili di tipo struct Player. Tutto ciò globale.
Nel main chiamo una funzione a cui passo il puntatore a Ship e l'indirizzo delle variabili Struct Player. nella funzione essendo 8 le navi in gioco alloco memoria per un vettore di struct Ship di 8 elementi e lo riempio creando a caso dei valori di direction, x e y per ogni nave e poi copio ogni elemento del vettore nella relatiova "nave" di ogni giocatore. la funzione rende un puntatore alla prima locazione di memoria allocata. Questo è preso in ingresso da un altra funzione che scorre il vettore e disegna le navi partendo dalle coordinate x y del punto di partenza e stampando verso destra se è orzzontale o verso il basso se è verticale. Sono riuscito a fare in modo che le navi abbiano tutte punti di partenza diversi (che elimina il problema delle navi a "lancette i orologio"), ma ogni tanto mi si incrociano!! la cosa più logica sarebbe un contrllo del tipo "se la casella successiva è libera stampa la lettera della nave altrimenti cambia le coordinate di partenza o la direzione...il fatto è che queste sono salvate in un vettore creato in un altra funzione mentre in quella che stampa il vettore viene solo ciclato per ricavarne i dati....scusate se sono stato lungo ma effettivamente è un po complesso il funzionamento del programma...ovviamente è vitato l'uso dei break che non siano quelli obbligatori di un costrutto switch!!!!! Se serve vi posto il codice grazie in anticipo!!!!


01001110010011001110002....aaahrgh!!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:13
Mercoledì, 06/01/2010
Devi postare sicuramente il codice ed indicare (in maniera più concisa) qual e' il problema e dove pensi si possa intervenire per risolverlo.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 21:26
Mercoledì, 06/01/2010
probabilmente faresti meno fatica usando una struttura più appropriata per la nave...

ad esempio potresti considerare una nave come un rettangolo, e pertanto indicarne i due estremi per individuare tutte le caselle di cui si compone (Xmin, Ymin, Xmax, Ymax).

Così facendo, per testare se 2 navi si intersecano, basta usare un banale algoritmo di intersezione tra rettangoli...

questo potrebbe essere un esempio:
Codice sorgente - presumibilmente C++

  1. typedef struct _Ship
  2. {
  3.   int Xmin;
  4.   int Ymin;
  5.   int Xmax;
  6.   int Ymax;
  7. } Ship;
  8.  
  9. int intersect(Ship *first, Ship *second)
  10. {
  11.   // sanity check
  12.   if ((first == NULL) || (second == NULL))
  13.     return 0; // Almeno uno dei puntatori non è valido... non si scontra nessuno
  14.  
  15.   if (!(first->Xmin > second->Xmax || first->Xmax < second->Xmin ||
  16.                 first->Ymin > second->Ymax || first->Ymax < second->Ymin))
  17.   {
  18.     return 1; // WARNING! Due navi si scontrano!
  19.   }
  20.   else
  21.   {
  22.     return 0; // nessuna intersezione
  23.   }
  24. }


Ultima modifica effettuata da TheKaneB il 06/01/2010 alle 21:32


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
Alby_c84 (Normal User)
Newbie


Messaggi: 2
Iscritto: 06/01/2010

Segnala al moderatore
Postato alle 9:56
Giovedì, 07/01/2010
cavolo non ci avevo minimamente pensato, che ideona!!!!
Grazie 1000!!!


01001110010011001110002....aaahrgh!!
PM Quote