Esercizi preliminari all'esame di Linguaggi e metodologie di programmazione A.A. 2009-2010 A partire dalla versione "zuul-better" relativa al progetto didattico "world-of-zuul" risolvere gli esercizi di esame di seguito riportati. Ambientazione L'orco Shrek deve salvare la Principessa Fiona, prigioniera nell'alta torre di un castello arroccato su di un'altissima montagna, circondato da un lago e custodito da un drago. A partire dal ponte levatoio (outside.gif), Shrek dovrà trovare la principessa (princess.gif), chiusa in una stanza posta in fondo ad un corridoio (hallway.gif) in cima alla torre. La porta della stanza è chiusa con una chiave perduta nel castello. Dietro la porta della stanza della principessa il drago (dragon.gif) è pronto per la battaglia. Gli altri ambienti del castello sono: • il cortile (courtyard.gif), al quale si accede superando il ponte levatoio; • la stanza del trono (throne-room.gif), confinante con il cortile e una rampa di scale (stairs.gif). • la rampa di scale, confinante con la stanza del trono, con la stanza delle torture (scendendo le scale) e con il corridoio che porta alla stanza della principessa (salendo le scale); • la stanza delle torture (dungeon.gif), alla quale si accede attraverso la rampa di scale. Sessione di giugno 2010 Obiettivo del gioco Shrek deve attraversare il castello alla ricerca della chiave che gli permetterà di aprire la porta della stanza della principessa e salvare Fiona, dopo aver battuto il drago. Capitolo 1: il castello Fornire il videogioco di un'interfaccia grafica. Ad ogni stanza dovrà essere associata un immagine che verrà visualizzata nel momento in cui il giocatore vi farà accesso. L'inserimento dell'input utente dovrà avvenire per mezzo di un campo testo (JtextField), come mostrato nella figura successiva: Capitolo 2: una porta da aprire... La chiave necessaria per aprire la porta della camera della principessa dovrà essere posizionata casualmente in uno degli ambienti del castello (tranne che nella stanza della principessa, ovviamente!) al momento dell'avvio del gioco. Implementare i comandi necessari (es. raccogli e usa). Capitolo 3: battaglia con il drago Appena aperta la porta della stanza della principessa, il giocatore sarà attaccato dal drago. Vincerà il duello chi, estraendo un numero casuale tra 1 e 10, otterrà il punteggio massimo. In caso di vittoria di Shrek la principessa sarà libera, altrimenti il gioco terminerà. Capitolo 4: refactoring - il lavoro “sporco” che qualcuno deve pur fare Nel metodo processCommand della classe Game c'è una sequenza di comandi if utili a gestire il comando corretto quando una parola (inserita dall'utente) viene riconosciuta come comando. Come spiegato a lezione e a più riprese sottolineato dal testo di riferimento del corso, il limite di questa soluzione è dato dalla necessità di aggiungere un ramo del comando if per ogni nuovo comando che si intende aggiungere. Modificare l'applicazione in modo da rendere la gestione dei comandi più modulare. Sessione di luglio 2010 Obiettivo del gioco Shrek deve attraversare il castello alla ricerca della chiave che gli permetterà di aprire la porta della stanza della principessa e salvare Fiona, dopo aver battuto il drago in una battaglia fino all'ultimo respiro. Risolvere i capitoli (esercizi) 1, 2 e 4 relativi alla sessione di Giugno 2010. Inoltre risolvere i nuovi capitoli sotto riportati. Capitolo 5: tornare sui propri passi... Implementare il comando back. Questo comando porta Shrek nella stanza precedentemente visitata. Applicazioni ripetute del comando back, permettono al giocatore di percorrere a ritroso, e in modo automatico, il percorso fino a quel punto intrapreso. Suggerimento: usare una Stack per memorizzare il percorso di Shrek (cfr. API Java). Capitolo 6: battaglia con il drago... ora si fa sul serio! Appena aperta la porta della stanza della principessa, il giocatore sarà attaccato dal drago. Shrek e il drago sono inizialmente dotati di 30 punti vita ciascuno. La battaglia consiste in una serie di attacchi alternati (turni) che andranno a decrementare un certo numero di punti vita all'avversario. Più precisamente ogni attacco toglierà un numero casuale di punti vita (all'avversario ovviamente!) compreso tra 0 e 10. Vincerà il duello chi per primo dei due contendenti azzererà i punti vita dell'avversario. Il primo ad attaccare sarà il drago. Esempio di combattimento: Potenza dell'attacco Punti vita Drago Punti vita Shrek Inizio combattimento - 30 30 Turno 1 (attacco del drago) 4 30 26 Turno 1 (attacco di Shrek) 6 24 26 Turno 2 (attacco del drago) 8 24 18 Turno 2 (attacco di Shrek) 6 18 18 … … … ... Sessione di settembre 2010 Obiettivo del gioco Shrek deve attraversare il castello alla ricerca della chiave che gli permetterà di aprire la porta della stanza della principessa e salvare Fiona, dopo aver battuto il principe Azzurro, il drago in una battaglia fino all'ultimo respiro e prima che sia troppo tardi... Risolvere i capitoli (esercizi) 1, 2 e 4 relativi alla sessione di Giugno 2010. Risolvere i capitoli (esercizi) 5 e 6 della sessione di Luglio 2010. Inoltre risolvere i nuovi capitoli sotto riportati. Capitolo 7: un antagonista da battere Shrek non è l'unico “cavaliere” presente nel castello. Anche il principe Azzurro è impegnato nel salvataggio della principessa Fiona e non è disposto a lasciar passare un suo antagonista. La posizione del principe Azzurro è determinata casualmente all'avvio del gioco e non cambia durante la partita. Quando Shrek entra nella stanza in cui si trova il Principe Azzurro, sarà immediatamente attaccato da quest'ultimo. Il combattimento avverrà in accordo alle regole definite nel capitolo 6. I punti vita del Principe Azzurro sono 15. In caso di vittoria del Principe Azzurro, la partita terminerà, altrimenti Shrek potrà esplorare la stanza e continuare la sua avventura. A seguito di un duello con il Principe Azzurro, i punti vita di Shrek NON saranno ripristinati. Capitolo 8: il biscotto magico In una delle stanze del castello, determinata casualmente all'avvio del gioco, è presente un biscotto magico. Dopo aver raccolto il biscotto magico, Shrek potrà in qualsiasi momento (tranne che durante un combattimento) mangiarlo per ripristinare completamente i suoi punti vita. Nota: ovviamente ha senso al mangiare il biscotto magico nel caso in cui si sia incontrato e sconfitto il Principe Azzurro. Capitolo 9: apri e chiudi il libro delle favole Aggiungere la funzionalità che permette di salvare la partita, in modo da poterla riprendere anche dopo il riavvio dell'applicazione. Sessione di febbraio 2011 Obiettivo del gioco Shrek deve attraversare il castello alla ricerca della chiave che gli permetterà di aprire la porta della stanza della principessa e salvare Fiona, dopo aver battuto il principe Azzurro, il drago in una battaglia fino all'ultimo respiroe prima che sia troppo tardi... Risolvere i capitoli (esercizi) 1, 2 e 4 relativi alla sessione di Giugno 2010. Risolvere i capitoli (esercizi) 5 e 6 della sessione di Luglio 2010. Risolvere i capitoli (esercizi) 7, 8 e 9 della sessione di Settembre 2010. Inoltre risolvere i nuovi capitoli sotto riportati. Capitolo 10: tempus fugit Aggiungere un tempo limite al gioco. Se non si libera la principessa entro un certo numero di passi il giocatore perde la partita. Un passo di gioco può essere liberamente definito (es. numero di comandi immessi dal giocatore, oppure il numero di stanze visitate). Capitolo 11: arrivano i nostri! Ciuchino e il Gatto con gli Stivali corrono in soccorso di Shrek. Purtroppo per Shrek i due sono piuttosto indisciplinati e si muovono continuamente nel castello: questo significa che ogni volta che Shrek entra in un locale del castello ha probabilità 1/10 di incontrare ognuno dei due personaggi. Quando Shrek incontra uno dei due amici (nulla vieta che li incontri entrambi nella stessa stanza) potrà decidere se portarlo con se oppure no. Oltre alla chiave Shrek potrà portare con sé un solo “oggetto”, dove gli oggetti possibili sono Ciuchino, il Gatto con gli Stivali e il biscotto magico. Il Gatto con gli Stivali potrà essere d'aiuto a Shrek solo nell'eventuale combattimento con il Principe Azzurro. Infatti nel caso in cui Shrek abbia con sé il Gatto con gli Stivali durante il combattimento con il Principe Azzurro, i sui attacchi avranno forza raddoppiata (il Gatto con gli Stivali combatte a fianco di Shrek). Analogamente Ciuchino potrà risultare utile a Shrek solo nel combattimento con il Drago. Infatti nel caso in cui Shrek abbia con sé Ciuchino durante il combattimento con il Drago, gli attacchi di quest'ultimo avranno forza dimezzata (il Drago, di sesso femminile, sarà distratta dal fascino irressistibile di Ciuchino).