Esercizio 8A (Ereditarietà)
Realizzare una classe Animale
di cui interessa memorizzare il
nome.
Le operazioni di interesse sono:
Animale
che crea un oggetto Animale, il cui nome è
passato come parametro; emettiVerso
che stampa il verso dell'animale generico (ad
esempio la stringa "@#%&").Particolari tipi di animali sono il cane, il gatto e il pappagallo. Per
ciascuno di essi, realizzare un'opportuna classe Java avente un costruttore
(che crea un oggetto opportuno con il nome associato ) e il metodo
emettiVerso
che stampa il verso opportuno. La classe associata al
pappagallo ha in più un metodo ripeti
che stampa la
stringa passata come parametro, ripetuta due volte.
Infine, si realizzino due classi associate alle razze di cane Chiwawa e
Rottweiler, aventi un costruttore e il metodo emettiVerso
che
stampa, rispettivamente, "bau!" e "BAU".
Esercizio 8B (Matrici)
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 le cella della matrice in modo casuale. 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.
Parte 1
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"
;"#"
.Parte 2
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, altrimenti è impostata a
non 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.salva
, che scrive lo stato di una partita, cioè lo
stato di ciascuna cella della matrice in un file
BattagliaNavale.sav
in modo che un gioco interotto possa
essere ripreso in un secondo momento.apri
, che è un metodo statico che crea una nuova
classe BattagliaNavale
e che viene inizializzata leggendo
dal file BattagliaNavale.sav
salvato dal metodo
precedente.Parte 3
Realizzare un cliente della classeBattagliaNavale
che:
System.in
.
Tra i commandi ci sono: