View Full Version : [C++]Battaglia navale
Ciao a tutti,
a scuola mi è stato chiesto di creare un programma in c++ che simuli una partita di battaglia navale.
Qualcuno mi saprebbe spiegare a grandi linee come impostare il programma?
Ad esempio, qual'è il modo migliore per creare la griglia tipica del gioco? E il modo migliore per posizionare le navi? Cioè come farei a riempire delle determinate celle della griglia (quelle cioè in cui vado a posizionare le navi)?
karch_kiraly
11-05-2012, 07:04
Io inizierei pensando a come strutturare i dati. Io creerei una struttura dove inserire tutte le informazioni, poi la instanzierei in due matrici, una per ogni giocatore.
Beh visto che devi usare C++ comincia a pensare alle classi o entità da creare...
Ad esempio avrai una Griglia, dopodiché avrai delle Navi, ognuna di un certo tipo (lunghezza).
Dopodiché dovrai posizionare le navi sulla griglia (in realtà 2 griglie se vuoi far giocare 2 giocatori), per farlo quindi dovrai occupare una certa quantità di spazio a partire da un certo punto della griglia, a seconda della nave da posizionare.
Chiaramente ogni giocatore deve poter posizionare le navi ad ogni avvio del gioco.
Dopodiché devi dare la possibilità di condurre un attacco dando le coordinate della griglia.
Io inizierei pensando a come strutturare i dati. Io creerei una struttura dove inserire tutte le informazioni, poi la instanzierei in due matrici, una per ogni giocatore.
E' l'unica cosa che per ora ho fatto ;)
struct cella
{ bool nave;
bool colpito;
};
cella giocatore1[10][10];
cella giocatore2[10][10];
Beh visto che devi usare C++ comincia a pensare alle classi o entità da creare...
Ho dimenticato di dire che le mie conoscenze di C++ arrivano fino alle strutture e visto che il termine per il gioco è giovedì mi sa che non ho tempo di studiarmi classi ecc. :(
__ZERO_UNO__
12-05-2012, 22:31
Non è necessario usare un'intera matrice per tenere traccia della posizione delle navi. Sarà sufficiente memorizzare le coordinate di inizio e fine di una nave e da qualche parte le quattro ( sono sufficienti due coordinate, angolo sinistro e angolo destro ) dell'area di gioco. Una idea potrebbe essere
struct coordinate
{
unsigned x, y;
bool operator==(const coordinate& other)
{ return x == other.x && y == other.y; }
};
struct ship
{
// inizio e fine della nave
coordinate start, end;
};
struct area
{
const unsigned ships_n = 5;
coordinate leftbottom_point, rightup_point;
ship player_one[ships_n];
ship player_two[ships_n];
bool bomb( const coordinate& here ) { /* ><D */}
};
Per una serie di motivi anche io mi son trovato a provare a scrivere una battaglia navale umano vs umano in c; prima di procedere con il codice (anzi con l'algoritmo in sé) un dubbio mi ha assalito: se è vero che devo fare umano vs umano, è impossibile giocare sullo stesso pc, vero? Cioè, un giocatore vedrebbe la matrice dell'altro...
Per una serie di motivi anche io mi son trovato a provare a scrivere una battaglia navale umano vs umano in c; prima di procedere con il codice (anzi con l'algoritmo in sé) un dubbio mi ha assalito: se è vero che devo fare umano vs umano, è impossibile giocare sullo stesso pc, vero? Cioè, un giocatore vedrebbe la matrice dell'altro...
Infatti quando tocca all'altro giocatore io ho inserito un bel cout che stampa a video il messaggio: "Passa al Giocatore X il gioco".
Poi comunque lo scopo del lavoro che mi è stato assegnato non credo sia creare un supergioco, ma dimostrare di aver acquisito e saper usare le competenze ;)
Oppure programmi un gioco in lan e risolvi definitivamente :D
P.S. Sto pensando di aggiungere la funzionalità player vs pc, non deve essere difficile, basta far generare casualmente al programma le coordinate dell'inserimento delle navi e degli spari controllandole e impostando un ciclo che termina quando esse sono valide. Certo verrebbe a mancare tutta la parte dell'intelligenza del giocatore pc (che non ho voglia di sviluppare) ma amen.
Non è necessario usare un'intera matrice per tenere traccia della posizione delle navi. Sarà sufficiente memorizzare le coordinate di inizio e fine di una nave e da qualche parte le quattro ( sono sufficienti due coordinate, angolo sinistro e angolo destro ) dell'area di gioco. Una idea potrebbe essere
struct coordinate
{
unsigned x, y;
bool operator==(const coordinate& other)
{ return x == other.x && y == other.y; }
};
struct ship
{
// inizio e fine della nave
coordinate start, end;
};
struct area
{
const unsigned ships_n = 5;
coordinate leftbottom_point, rightup_point;
ship player_one[ships_n];
ship player_two[ships_n];
bool bomb( const coordinate& here ) { /* ><D */}
};
Sinceramente a me sembra che così ci si complichi la vita...poi la versione con due matrici 10x10 è quella della prof quindi meglio andare sul sicuro ;)
Mi spieghi cosa fanno le parti in grassetto?
Comunque sono a buon punto, ho terminato l'inserimento delle navi. :)
Uno screen
http://dl.dropbox.com/u/4641920/SCREEN.png
Oppure programmi un gioco in lan e risolvi definitivamente :D
Sai che l'avevo iniziato ed ero anche a buon punto ma poi l'avevo abbandonato? Quasi quasi prima di giugno lo finisco e magari lo posto qua.
Posso chiederti cosa hai usato per mostrare la matrice nell'immagine dell'ultimo post? Sembrerebbero quei simboli in fondo alla charmap, ma se non sbaglio non si può inserirli nella console... Come hai fatto?
Sai che l'avevo iniziato ed ero anche a buon punto ma poi l'avevo abbandonato? Quasi quasi prima di giugno lo finisco e magari lo posto qua.
Posso chiederti cosa hai usato per mostrare la matrice nell'immagine dell'ultimo post? Sembrerebbero quei simboli in fondo alla charmap, ma se non sbaglio non si può inserirli nella console... Come hai fatto?
certo che puoi:
char carattere=219
cout << carattere << endl;
e ti scrive il carattere 219 della charmap, naturalmente puoi farlo con qualunque altro carattere...
Comunque ho finito il gioco, non è venuto un gran che a livello di codice perchè ho dovuto fare di fretta (avevo una settimana di tempo) ma se qualcuno vuole provarlo e darmi qualche consiglio su come migliorarlo no problem ;)
link_battaglia_navale (http://min.us/mGfhvOllm)
Curiosità:
- come hai implementato la griglia navale?
Curiosità:
- come hai implementato la griglia navale?
Guarda il codice no?
Me la sono fatta da solo, combinando alcuni caratteri ascii...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.