Si vuole realizzare una variante del gioco Battaglia Navale. Battaglia Navale si gioca su di una matrice di 10x10 celle. Nella nostra variante l'avversario è il computer, che non può mai sparare. Esso dispone una certa quantità di navi, che occupano una cella, in modo casuale sulla matrice il giocatore tenta di distruggerle. Ad ogni turno il giocatore può sparare con due tipi di arma: il cannone ed il siluro. Se spara con il cannone sulla cella in posizione (riga,colonna), ha l'effetto di colpire la cella stessa, mentre se spara con il siluro da una posizione (riga,colonna) e con una certa direzione (che può assumere solo i valori -1,0 1), colpisce tutte le celle allineate lungo la direzione la cui colonna cc è maggiore o uguale a c, come mostrato in figura.
Esercizio 9A
Realizzare una classe Cella
, che rappresenta una cella del
campo di gioco. Ciascuna cella è caratterizzata dalle seguenti
informazioni:
Cella
deve essere provvista dei seguenti metodi:
toString
che si comporta come segue:
" "
);"X"
;"#"
.Esercizio 9B
Realizzare una classe BattagliaNavale
, che contiene una
matrice di 10x10 celle. La classe deve implementare i seguenti metodi:
random()
della classe Math
: se il risultato
è minore di 0.2, la cella è impostata ad
occupata.numeroNavi
che restituisce il numero di celle occupate e non
colpite;
spara
, che dati due interi riga e colonna,
modifica lo stato della cella di coordinate (riga,colonna), come
colpita;lanciaSiluro
, che dati due interi che rappresentano la
posizione (riga,colonna) di partenza del siluro e un intero
direzione compreso tra {-1,0,1} che rappresenta la direzione, ha
l'effetto di colpire una serie di caselle allineate come descritto
sopra.toString
, che restituisce la stringa rappresentante il campo
di gioco, dove per ogni cella viene stampato " ", "X"
o
"#"
, a seconda che essa sia non colpita, colpita ed
occupata, o colpita e libera.Esercizio 9C
Realizzare un cliente della classeBattagliaNavale
che: