PDA

View Full Version : Implementazione Battaglia Navale


DesmoColo
12-01-2007, 16:41
Salve a tutti!
Per un progetto d'esame devo implementare il gioco della battaglia navale in Java. Il gioco utilizza un'interfaccia grafica ed Il giocatore ha come avversario il computer.
Ecco come ho pensato di procedere:
- Ho un'oggetto Cella, contenente le coordinate (x,y) ed un valore booleano (true se la cella viene occupata da una mia nave, false se invece è vuota)
- Ho un'oggetto griglia fatta di oggetti Cella.
- Ho (al momento solo una) una "nave da due", che si posiziona in modo random sopra due celle, settando il valore di queste a true.

Con una nave nessun problema, ma se ve ne sono di più (me ne servono 5 di diversa lunghezza) si presenta il problema delle possibili sovrapposizione fra di esse. Ho pensato un algoritmo che non mi sembra molto furbo:

posiziona nave da due;
posiziona nave da tre;
se qualche coordinata della nave da tre si sovrappone a quelle della nave da due{
sposta nave;
riesegui il controllo
}

Con due navi tanto e tanto... ma se ne ho 5, l'ultima ha probabilità sempre maggiori di beccare una cella gà occupata e di iterare più e più volte. Avete suggerimenti?

TuLKaS85
12-01-2007, 17:58
secondo me ti conviene partire dalle celle singole e piazzare prima le navi + grandi mi spiego :


hai la griglia , generi un random e cntrolli che non sia occupato, poi ti sposti in una posizione contigua se libera la occupi e continui così finchè nn arrivi al max della tua nave.
se xò ad un certo punto trovi uno spazio occupato ti fermi, e a seconda di quante ne hai riempite avrai fatto la tua nave.

ovviamente devi controllare che il size della nave non sia già stato fatto , se hai appena creato una nave da tre e tu una da tre già l'avevi devi ritornare sui tuoi passi e cancellarla, quindi rigenerare il random....

l'ho buttata lì ci saranno soluzioni + efficienti...

in bocca al lupo

loris_p
12-01-2007, 18:45
così però mi sembra che tu non tenga conto dell'orientamento delle navi..
ad ogni modo se può tornarti utile, ho da poco iniziato un progettino del rompicapo della battaglia navale su sourceforge con alcuni compagni di università (attualmente fermo causa esami :cry: )..
se vuoi dare un'occhiata ai sorgenti (in particolare a te tornerebbe utile grid.cpp) ci sono i metodi implementati (ma non ancora testati) per avere un punto di partenza:
http://naval-battle.svn.sourceforge.net/viewvc/naval-battle/

TuLKaS85
12-01-2007, 18:48
per l'orientamento devi sceglire su quali celle contigue muoverti magari, scegli solo orizzonatale e verticale, se vuoi complicarti la vita vai anche in diagonale...