Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando)



Documenti analoghi
1 Giochi a due, con informazione perfetta e somma zero

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Basi di dati Microsoft Access

Esercitazione n 4. Obiettivi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Modulo 4: Ereditarietà, interfacce e clonazione

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Esercizi su. Funzioni

Codifica: dal diagramma a blocchi al linguaggio C++

Esempi di algoritmi. Lezione III

Corso di Informatica

Analisi e diagramma di Pareto

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Appunti di Sistemi Elettronici

Soluzione dell esercizio del 2 Febbraio 2004

Capitolo 2. Operazione di limite

Object Oriented Programming

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto)

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Abstract Data Type (ADT)

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

LA DIFFERENZA un nodo da sciogliere. Un percorso ad ostacoli in classe prima e seconda

Prova di Laboratorio di Programmazione

Dispense di Informatica per l ITG Valadier

Guida all uso di Java Diagrammi ER

Equilibrio bayesiano perfetto. Giochi di segnalazione

Convertitori numerici in Excel

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI

Le query di raggruppamento

Traccia di soluzione dell esercizio del 25/1/2005

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

LA FATTURAZIONE DEI SERVIZI COMMISSIONATI

CONCETTO DI ANNIDAMENTO

Progettaz. e sviluppo Data Base

Le variabili. Olga Scotti

Database 1 biblioteca universitaria. Testo del quesito

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Progetto Ente pubblico

Matematica in laboratorio

Soluzione dell esercizio del 12 Febbraio 2004

4 3 4 = 4 x x x 10 0 aaa

La selezione binaria

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1

DESIGN PATTERN ESERCITAZIONE UML E DP INGEGNERIA DEL SOFTWARE. A quali pattern si riferiscono i tre schemi?

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Plate Locator Riconoscimento Automatico di Targhe

Come realizzare i disegni in Autocad partendo da un immagine

PROVA FINALE V. AULETTA G. PERSIANO ALGORITMI II - -MAGIS INFO

risulta (x) = 1 se x < 0.

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Lezione 9: Cambio di base

COSTER. Import/Export su SWC701. SwcImportExport

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

Personalizzazione documenti Word

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

APPUNTI SU PROBLEMI CON CALCOLO PERCENTUALE

Programmazione Orientata agli Oggetti in Linguaggio Java

2.7 La cartella Preparazioni e CD Quiz Casa

Leggere un messaggio. Copyright 2009 Apogeo

Guida all utilizzo del CRM

STAMPA UNIONE DI WORD

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Una moderna versione grafica di un antico gioco Dernier con l aggiunta di carte azione che rendono più movimentato e piacevole

Il calendario di Windows Vista

Guida all utilizzo della Posta Elettronica Certificata

Gestione Risorse Umane Web

Note su quicksort per ASD (DRAFT)

17 Gli scenari. cartelle di lavoro; unendoli poi in un

La posta elettronica (mail)

APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

Il Programma Operativo. Mentore. Rende ordinario quello che per gli altri è straordinario

Algoritmi e diagrammi di flusso

Esercizi Capitolo 6 - Alberi binari di ricerca

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico

Ancora sugli insiemi. Simbologia

Segui passo passo le istruzioni e potrai giocare le tue sfide online. Puoi già capirlo, è facile, divertente e eccitante.

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

Il database management system Access

Corso di formazione CerTICTablet

da 2 a 5 giocatori, dai 10 anni in su, durata 30 minuti

Object Oriented Software Design

Fasi di creazione di un programma

Esercizio data base "Biblioteca"

Il principio di induzione e i numeri naturali.


Transcript:

Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando) Le basi della programmazione ad oggetti: per costruire in modo adeguato una applicazione basata sulla programmazione ad oggetti occorre procedere con un analisi ben accurata fatta di passi successivi che se applicati e compresi renderanno comprensibile e semplice questo ingrato compito. I passi da compiere sono i seguenti: l'analisi, il Disegno e la vera e propria Programmazione. Supponiamo di voler realizzare il gioco dei 21 fiammiferi: Testo: Si vuole realizzare un gioco costituito da una fila di 21 fiammiferi o altro oggetti simili al quale partecipano due giocatori. I due giocatori alternativamente devono rimuovere dalla fila uno due o tre fiammiferi. Il giocatore che rimuove l ultimo fiammifero perde. Analizzando il testo (in questo caso molto semplice) individuiamo i casi d uso andando a ricercarli tra i verbi del testo. In questo caso vediamo subito che le azioni sono quelle relative alla rimozione dei fiammiferi, però bisogna anche stabilire a chi tocca e chi ha vinto. Ovviamente un altra informazione importante è rappresentata dal numero di fiammiferi rimasti in gioco, senza la quale non potremmo scegliere la mossa da fare. Con queste ipotesi potremmo immaginare uno scenario come quello mostrato dal seguente diagramma UML: Laboratorio di Informatica Prof. Accarino Pagina 1

Nella fase di disegno OOD(Object Oriented Design), che segue l'individuazione dei casi d'uso, si devono individuare le classi (o le gerarchie di classi) necessarie, rispondendo alla domanda "chi fa che cosa?". Questa domanda può essere tradotta come "quali Classi devono fornire i servizi necessari per realizzare le funzionalità individuate nei casi d'uso?" Nel nostro esempio si vede che tutte le azioni coinvolgono un unico oggetto che potremmo chiamare Fiammiferi ed essendo il nostro, un programma che fa uso di tastiera e monitor, abbiamo bisogno di un oggetto che ci permetta di leggere da tastiera e visualizzare messaggi sul monitor. Questo oggetto noi lo abbiamo già creato ed è la nostra classe InputOutput vista nelle esercitazioni precedenti descritta dal seguente diagramma: InputOutput - br : BufferedReader - isr: InputStreamReader + InputOutput() + leggistringa(): String + leggiint(): int + leggidouble(): double + leggichar(): char + display(s:string) - leggitastiera():string readtastiera(): String BufferedReaader InputStreamReader Vediamo ora La classe Fiammiferi quali caratteristiche deve avere e quali metodi deve sviluppare per poter assolvere alle azioni previste dal diagramma dei casi d uso che abbiamo previsto. Per quanto riguarda i suoi attributi possiamo facilmente affermare che essi sono: il numero di fiammiferi e il numero che individua il giocatore di turno. nfiammiferi che all inizio vale 21 e si decrementa ad ogni mossa e ngiocatore che vale 1 0 2 e si alterna ad ogni mossa. Quindi entrambi sono di tipo intero. Per quanto riguarda i metodi ci deve essere innanzitutto un metodo che toglie 1,2 o 3 fiammiferi Questo metodo lo chiameremo: toglifiammiferi e riceverà come parametro il numero di fiammiferi da togliere e modificherà sia il numero di fiammiferi che il valore corrispondente al giocatore stabilendo il turno. Ci deve essere un metodo: finegioco che stabilisce se il gioco è finito esso restituirà vero o falso a seconda che il numero di fiammiferi e >0 o <=0; Ci deve essere un metodo che ci dice chi ha vinto: getwinner che restituirà il numero del giocatore a cui spettava il turno. Ci deve essere un metodo che chiameremo stampastato che visualizza lo stato del gioco e cioè il valore delle variabili di istanza in quel momento che rappresentano appunto il numero di fiammiferi rimasti e il turno del giocatore. Laboratorio di Informatica Prof. Accarino Pagina 2

La nostra classe Fiammiferi è quindi rappresentata dal seguente diagramma: - nfiammiferi:int - ngiocatore Fiammiferi + Fiammiferi(in ng:int) + toglifiammiferi(in f:int) + finegioco():boolean + getwinner():int + stampastato() e la nostra applicazione può essere rappresentata come segue: Ora sviluppiamo i metodi della classe Fiammiferi: Il costruttore Fiammiferi si limita ad inizializzare il turno di gioco al giocatore prescelto e ad inizializzare il numero di fiammiferi a 21; toglifiammiferi decrementa il numero di fiammiferi ricevuti e cambia turno. Per cambiare turno si dovrebbe testare il valore attuale di ngiocatore e se =1 impostarlo a 2 se =2 impostarlo a 1. Anche questo semplice esempio ci dimostra che la ricerca dell algoritmo è pura intelligenza e non può essere spiegata infatti un metodo molto più efficace è ngiocatore=3-ngiocatore finegioco semplicemente ritorna true o folse a seconda che il numero di fiammiferi sia >0 o <=0. getwinner ritorna il numero del giocatore se il gioco è finito altrimenti ritorna 0 stampastato stampa lo stato attuale del gioco rappresentato dal giocatore di turno e dal numero di fiammiferi rimasti. Adesso concentriamoci su cosa deve fare il main, cioè come esso interagisce con gli oggeti che gli abbiamo messo a disposizione. La prima cosa che esso farà è instanziare un oggetto InputOutput per poter interagire con l utente. Dopodiché chiederà quale giocatore vuole iniziare a giocare e ricevuta la risposta farà una istanza dell oggetto Fiammiferi con il turno prescelto. Laboratorio di Informatica Prof. Accarino Pagina 3

Il resto del programma si sviluppa in un ciclo di gioco che può essere descritto come segue: mentre il gioco non è finto o visualizzare lo stato del gioco o far fare la prossima mossa fine ciclo visualizzare la fine del gioco visualizzare il vincitore La classe Fiammiferi: Laboratorio di Informatica Prof. Accarino Pagina 4

La classe Programma: per prima cosa importiamo la libreria personalizzata di input output come visto nell esercitazione precedente e poi scriviamo il nostro programma come segue: Una volta provato che il programma funzioni aggiungere innanzitutto ulteriori controlli per verificare che si tolga il giusto numero di fiammiferi e poi ampliare il gioco facendo in modo che si possa scegliere di giocare anche contro il computer. Laboratorio di Informatica Prof. Accarino Pagina 5