DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab X: Battaglia Navale Gianluca Durelli – [email protected] Marco D. Santambrogio – [email protected] Ver. aggiornata al 12 Maggio 2013 Argomenti DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Argomenti di questo laboratorio: Funzioni Strutture dati • Obiettivo: Risolvere gli esercizi 1 e 2 2 Battaglia Navale DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • • • • • • Definizione strutture dati Inizializzazione partita Disegna tabellone di gioco Esegui mossa giocatore Controlla vincitore Gestione dell’intera partita 3 Esercizio 1 – Definizione strutture dati DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Si definiscano le strutture dati per la gestione della battaglia navale: 2 Giocatori Ogni giocatore ha: • • • • • Un nome Un tabellone su cui posizionare le navi (TabelloneNavi) Un tabellone su cui segnare i risultati delle sue mosse (colpito, affondato, mancato) (TabelloneRisultati) Un insieme di navi di diverso tipo e dimensione: – – – Sottomarino: lunghezza 1 Incrociatore: lunghezza 2 Portaerei: lunghezza 4 Ogni nave: • • • • Ha una posizione nel tabellone (x,y) E’ messa in una direzione (orizzontale o verticale) Può essere o meno affondata E’ di un particolare tipo: – Sottomarino, Incrociatore, Portaerei Regole generali: La dimensione del campo da gioco e il numero di navi per ogni tipo è un parametro definibile a priori Le navi possono essere posizionate sul tabellone in orizzontale oppure verticale Le navi non possono sovrapporsi tra loro 4 Esercizio 2 – Inizializzazione partita DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Si scriva il codice necessario per dare inizio ad una partita: Richiesta dati dei giocatori: • Nome • Posizione iniziale delle navi: – Per ognuna delle navi da posizionare vengono richieste le coordinate x ed y e la direzione (orizzontale o verticale) – La nave viene posizionata a partire dalla posizione x,y e muovendosi nel verso delle x crescenti (orizzontale) oppure y crescenti (verticale) • Suggerimento: Si usino 2 funzioni: • Una per la richiesta dei dati • Una per controllare che data una nave ed un tabellone questa non vada a sovrapporsi a navi già presenti – In caso contrario si proceda alla richiesta di nuove corrdinate dove posizionare la nave • Nota: Non è necessario rappresentare graficamente le navi, l’importante è inizializzare le strutture dati. La rappresentazione è oggetto del prossimo esercizio 5 Esercizio 3 – Disegna tabellone di gioco DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Si rappresenti il tabellone di gioco definito a valle dell’inizializzazione dell’esercizio 2 • Si sfruttino le funzioni già presenti nel file sorgente, e presentate a lezione: disegna_schermo disegna_linea … 6 Esercizio 4 - Esegui mossa giocatore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Scrivere la parte di codice necessaria a realizzare una mossa del gioco: Richiesta coordinate dove colpire Controllo risultato mossa: • Colpito • Colpito ed affondato • Mancato Aggiornamento del TabelloneRisultati del giocatore che fa la mossa Eventuale aggiornamento del TabelloneNavi dell’altro giocatore 7 Esercizio 5 – Controllo vincitore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Scrivere una funzione che determina se la partita è stata vinta da qualcuno oppure è necessario continuare a giocare: Una partita si dichiara vinta dal giocatore A quando questo ha affondato tutte le navi del giocatore B 8 Esercizio 6 – Gestione dell’intera partita DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Scrivere una funzione che gestista la partita. La funzione combina le funzioni scritte negli esercizi precedenti: Inizializza le strutture dati Inizia un ciclo in cui ad ogni iterazione: • • • • Si disegna il tabellone Viene chiesta la mossa al giocatore corrente Il gioco viene aggiornato con il risultato della mossa Viene controllato se la partita ha un vincitore – In questo caso il ciclo termina Si stampano le informazioni relative al vincitore della partita 9 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • BUON LAVORO! 10