Lab X: Battaglia Navale Process synchronization Operating System Lab X: Battaglia Navale Gianluca Durelli – durelli@elet.polimi.it Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 12 Maggio 2013 © 2005 William Fornaciari
Argomenti Argomenti di questo laboratorio: Obiettivo: Funzioni Strutture dati Obiettivo: Risolvere gli esercizi 1 e 2
Battaglia Navale Definizione strutture dati Inizializzazione partita Disegna tabellone di gioco Esegui mossa giocatore Controlla vincitore Gestione dell’intera partita
Esercizio 1 – Definizione strutture dati 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
Esercizio 2 – Inizializzazione partita 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
Esercizio 3 – Disegna tabellone di gioco 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 …
Esercizio 4 - Esegui mossa giocatore 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
Esercizio 5 – Controllo vincitore 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
Esercizio 6 – Gestione dell’intera partita 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
BUON LAVORO!