################################################ ############### ############### ############### CAMPO MINATO ############### ############### ############### ################################################ L'obiettivo e' scrivere una classe public class CampoMinato che permette di simulare una partita al noto gioco "campo minato". DESCRIZIONE DEL PROBLEMA ------------------------ Un campo e' un rettangolo avente numero di righe e colonne prefissato. Assumiamo che 0=0 : cella scoperta con n mine adiacenti 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 2 * - - - - - - - - - - - - - - - - - - 1 * - - - - - 2 - - - - - - - - - - - - - 2 - - - - - * 3 * - - - - - - - - - - - - 3 - - - - - - * - - - - - - - - - - - - - 4 - - - - - - * 3 - - - - - - - - - - - - 5 - - - - - - * - - - - - - - - - - - - - 6 - - - - - - - 1 - - - - - - - - - - - - 7 - - - - - - - - - - - - - - - - - - - - 8 - - - - - - - - - - - - - - - - - - - - 9 - - - - - - - - - - - - - - - - - - - - 10 - - - - - - - - - - - - - - - - - - - - 11 - - - - - - - - - - - - - - - - - - - - 12 - - - - - - - - - - - - - - - - - - - - 13 - - - - - - - - - - - - - - - - - - - - 14 - - - - - - - - - - - - - - - - - - - 0 Nella prima riga viene stampata la numerazione delle colonne e nella prima colonna il numero di riga (tali numeri hanno al massimo due cifre). Nel campo ci sono 7 mine e le celle scoperte sono 6. Esempi di celle scoperte sono (0,0) e (14,19). La cella (0,0) ha due mine adiacenti. La cella (14,19) non ha mine adiacenti. PRINCIPALI OPERAZIONI --------------------- Devono essere possibili le seguenti operazioni: - Creazione di un campo vuoto di dimensione fissata. - Inserimento di una mina in una cella. - Inserimento casuale di mine. - Riconoscere se una cella contiene una mina. - Scoprire una cella. - Stampa del campo, senza visualizzare le mine. - Stampa del campo, visualizzando il contenuto di tutte le celle. ########################################################################################## ################### ################### ################### PARTE 1: definizione della classe CampoMinato ################### ################### ################### ########################################################################################## La classe CampoMinato definisce un oggetto che rappresenta un campo minato su cui devono essere possibile effettuare le operazioni richieste dal gioco. La classe CampoMinato va scritta in un file di nome CampoMinato.java. Il file puo' essere compilato javac CampoMinato.java ma non eseguito in quanto in CampoMinato.java non viene definito il metodo main. Per utilizzare la classe CampoMinato occorrera' scrivere dei programmi che contengono un metodo main. La struttura del file CampoMinato.java e': ------------------------------- /*** file CampoMinato.java ****/ public class CampoMinato{ //CAMPI ..... definizione dei campi della classe ..... // COSTRUTTORI ..... definizione dei costruttori della classe ..... // METODI ..... definizione dei metodi ..... }// end class ----------------------------- Nella classe vanno distinti gli elementi che devono essere visibili all'esterno (public) da quelli usati solo all'interno (private). La scelta dei metodi e la loro visibilita' e' una fase delicata e importante (specifica di un sistema). Negli esercizi che faremo e' solamente richiesta l'implementazione di una specifica gia' definita. E' importante documentare il codice con opportuni commenti, in particolare il significato dei campi della classe, il comportamento dei costruttori e dei metodi. CAMPI DELLA CLASSE ------------------ I campi dalla classe servono per rappresentare lo stato di un oggetto. I campi statici permettono di rappresentare proprieta' comuni a tutti gli oggetti della classe. I campi sono privati in modo che siano modificabili solo attraverso i metodi pubblici della classe. Definiamo i seguenti campi: private int[][] matr; // matrice che rappresenta il campo private int righe; // numero delle righe private int colonne; // numero delle colonne private int mine; // numero delle mine private int celleScoperte; // numero delle cellescoperte Per rappresentare nel programma lo stato di un oggetto CampoMinato, conviene introdurre due costanti intere NONSC e MINA. /*** Significato del valore di matr[r][c]: matr[r][c] == NONSC ==> la cella (r,c) non e' ancora stata scoperta matr[r][c] == MINA ==> la cella (r,c) contiene una mina matr[r][c] == n E n>= 0 ==> la cella (r,c) e' stata scoperta e ha valore n (n: numero mine nelle celle adiacenti) ***/ // campi statici usati per la rappresentazione interna del contenuto di una cella private static final int NONSC = -1; // si puo' scegliere un qualunque valore k<0 private static final int MINA = -2; // campi statici che definiscono i caratteri usati nella stampa private static char NONSC_CHAR = '-'; // carattere per rappresentare una cella non scoperta private static char MINA_CHAR = '*'; // carattere per rappresentare una cella con mina COSTRUTTORI ----------- La classe dispone di due costruttori. Costruttore 1): public CampoMinato(int r, int c) ------------------------------------------------ Costruisce un campo minato di r righe e c colonne. Si assume 0