Fondamenti di Informatica 1
Corsi di Laurea in Ingegneria
Informatica e Automatica
A.A. 2002/03
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 e' il computer, che non può mai sparare. Esso dispone una certa quantita' 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 puo' assumere solo i valori -1,0 1), colpisce tutte le celle allineate lungo la direzione la cui colonna cc e' maggiore o uguale a c, come mostrato in figura.
Parte I
Implementare una classe
Cella
, che rappresenta una cella del campo di gioco. Ciascuna cella è caratterizzata dalle seguenti informazioni:
- colpita, che indica se la cella è stata colpita almeno una volta,
- occupata, che indica se la cella è occupata da una nave.
La classe
Cella
deve essere provvista dei seguenti medoti:
- un costruttore che crei una cella
"non colpita"
e"non occupata"
;- metodi per accedere a tutti gli attributi, che ne ritornano il valore del campo relativo;
- un metodo per impostare come
"colpita"
una cella;- un metodo per impostare come
"occupata"
una cella;- un metodo
toString
che si comporta come segue:
- se la cella non e' colpita, ritorna la stringa composta da un carattere blank (
" "
);- se la cella e' colpita, ed e' occupata ritorna la stringa
"X"
;- se la cella e' colpita e libera ritorna la stringa
"#"
.
Parte II
Implementare la classe
BattagliaNavale
, che contiene una matrice di 10x10 celle. La classe deve implementare i seguenti metodi:
- un costruttore che costruisce una matrice di 10x10 celle e le occupa in modo casuale, come segue: per ogni cella, si invochi il metodo statico
random()
della classeMath
: se il risultato è minore di 0.2, la cella è impostata ad"occupata"
.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 il 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.