1 Videopoker esempio di applicazione in java. 2 Videopoker Un giocatore, con un portofaglio iniziale il giocatore punta il banco da 5 carte il giocatore.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Algoritmi fondamentali
Advertisements

Oggetti Java.
Recupero debito quarto anno Secondo incontro
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Fondamenti di Informatica
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Overriding.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
1 Ereditarietà Una classe può essere derivata da una classe esistente usando la sintassi: public, protected e private specificano il tipo di accesso ai.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Struct, enum, Puntatori e Array dinamici
Strutture di controllo in C -- Flow Chart --
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Le funzioni.
Java base IV: Java e la programmazione O.O.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
Astrazione procedurale ed eccezioni
Esercizi.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Università degli Studi di Napoli Parthenope programmazione III.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Programmazione ad oggetti
1 Un esempio con iteratore: le liste ordinate di interi.
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Esercitazione del 7 marzo 2008 Ereditarieta’. Esercizio: soluzione Implementare la seguente specifica che definisce un tipo di dato Libro.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
3 ALS - ASA 24 Marzo Poker 4 giocatori Mazzo di 32 carte che hanno otto valori (A, K, Q, J, 10, 9, 8, 7), nei quattro semi (quadri, cuori, picche,
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2015/16 Oltre le classi.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Transcript della presentazione:

1 Videopoker esempio di applicazione in java

2 Videopoker Un giocatore, con un portofaglio iniziale il giocatore punta il banco da 5 carte il giocatore può cambiare le carte si cambiano le carte si calcola la vincita (poker= 10 volte la puntat, ecc..)

3 Ragioniamo ad oggetti individuiamo i protagonisti della nostra applicazione Giocatore MazzoPoker (fatto di tante Carte) TavoloDaGiocoVideoPoker PunteggioPoker Attenzione: tutte le considerazioni che seguono e il livello di dettaglio e le imlementazioni non sono le uniche possibili! Cerchiamo soluzioni che favoriscano la facilità di lettura del codice e il suo eventuale riutilizzo

4 Classe Giocatore serve (almeno) un nome (stringa) e un portafoglio (float) si usa incapsulare le proprietà degli oggetti con dei metodi chiamati getter (quelli che restituiscono il valore) e setter (quelli che scrivono il valore) quindi variabile privata per la proprietà e metodi setProprietà e getProprietà pubblici

5 Classe Giocatore per il nome, ad esempio diventa private String nome; public getNome() { return nome;} public void setName(String name) { this.name = name; }

6 Classe Giocatore per il portafoglio, decido di implementare solo il metodo getPortafoglio come pubblico mi serviranno altri due metodi pubblici per agire sul portafoglio del giocatore: punta (soldiDaPunture) incassaVincita(soldiGuadagnati)

7 Classe Giocatore in questo modo.. entro di più nella logica del gioco..infatti dall’esterno (da altre classi) non avrebbe senso modificare direttamente il numero che esprime quanti soldi ha il giocatore, mentre ha senso avere un metodo che toglie o aggiunge una quantità di denaro, senza sapere quanto denaro ha il giocatore

8 Classe Giocatore per rafforzare ulteriormente questo concetto, dichiaro boolean il metodo public boolean punta(float soldiPuntati) { if (this.portafoglio > soldiPuntati) { this.portafoglio -= soldiPuntati; return true; } else { return false; } Cioè la puntata va a buon fine (e restituisce true) se il giocatore ha abbastanza denaro. Questo non obbliga a gestire per forza questo caso, ma da delle possibilità in più…per esempio per una nuova release

9 Classe Giocatore per il metodo incassaVincita, introduciamo il concetto di asserzioni public void incassaVincita(float soldi) { assert soldi > 0 : "che strano...!" this.portafoglio += soldi; } Le asserzioni sono dei “commenti” che (se abilitati con -ea a runtime) permettono di testare il corretto funzionamento della nostra applicazione ed eventualmente fermarla con un messaggio di errore

10 Classe Giocatore infine può essere utile definire un costruttore che riceva nome e portafoglio iniziale del nostro giocatore public Giocatore(String name, float portafoglio) { this.name = name; this.portafoglio = portafoglio; } nel main avremo Giocatore giocatore1 = new Giocatore("Ale", 55.0f);

11 Interfaccia Introduziamo il concetto di interfaccia: è simile ad una classe astratta, cioè dichiare i metodi ma non li implementa…è una dichiarazione d'intenti! In java è utile il concetto di interfacce perché simula l'ereditarietà multipla. Nel caso del mazzo di carte, possiamo utilizzare un'interfaccia per dare enfasi ad alcuni concetti.

12 mazzo ad esempio nel caso del mazzo: ci possono essere molti mazzi diversi per numero di carte, semi, figure, ecc. ma… qualsiasi mazzo potrà essere rimescolato di qualsiasi mazzo potremo voler sapere quante carte ha in tutto e quante carte rimangono di qualsiasi mazzo posso estrarre una carta

13 Interface Mazzo public interface Mazzo { Carta estraiCarta(); void mescola(); int carteRimangono(); int numeroCarte(); }

14 Classe MazzoPoker implementerà l'interfaccia Mazzo, cioè: implementerà tutti i suoi metodi nel costruttore caricherà tutte le carte opportune (dal 7 al re + asse, per ogni seme)

15 L'enumerazione Seme Per quanto riguarda il seme potremo dichiarare semplicemente quattro costanti; tuttavia dovendo eventualmente fare dei cicli con queste valori, in java esiste una struttura più potente e adeguata: public enum Seme { CUORI, QUADRI, FIORI, PICCHE }

16 Enum Per passare ai valori letterari basterà utilizzare il metodo.toString(); Si può ciclare su una enumerazione con un cilo for particolare, utilizzabili sia per le enumerazioni che per i vettori e altri tipi di insiemi for (Elemento e : Insieme ){ ….. }

17 classe Carta Ogni carta avrà un nome (es: 3 di fiori), un seme (es: fiori), un valore (es: 3) eventualmente un'immagine associata Possiamo implementare queste proprietà rispettando l'incapsulamento, quindi variabili private e metodi getter pubblic. Ha senso settare le proprietà direttamente nel costruttore

18 classe Carta conviene riscrivere il metodo ereditato.toString() (ovveride) che viene invocato automaticamente quando si usa System.out.print() In tali situazioni è buona regola utilizzare

19 Class Carta public class Carta { private String nome; private int valore; private Seme seme; private String nomeImmagine ; public String getNome() { return nome; public String toString() { return getNome(); } public Carta(String nome, Seme s, int v) { this.nome = nome; this.seme = s; this.valore = v; } /* ……..*/ }

20 costruttore MazzoPoker public MazzoPoker() { int indice = 0; for (Seme s : Seme.values()) { for (int i = 7; i < 15; i++) { String nome = ""; switch (i) { case 11: nome = "Fante"; break; case 12: nome = "Donna"; break; case 13: nome = "Re"; break; case 14: nome = "Asso"; break; default: nome = "" + i; } /* segue */

21 costruttore MazzoPoker Nella classe sono dichiarati 2 vettori di Carta dimensionati a NUMEROCARTE nome = nome + " di " + s.toString(); arrCarteMazzo[indice] = new Carta(nome, s, i); arrCarteMischiate[indice]=new Carta(nome, s,i); indice++; }

22 TavoloDaGiocoVideoPoker dovrà avere i metodi per dare le 5 carte segnare singolarmnete le carte da cambiare cambiare ogni singola carta far vedere la situazione del tavolo

23 PuteggioPoker è utile scrivere un metodo privato che che ricerchi il numero di ripetizioni di eventuali configurazioni (es: copia, tris, ecc.) rimane fuori la scala (stesso seme e valori in sequenza senza buchi)

24 Uno sguardo al main creiamo una classe VideoPoker che conterrà il metodo main nel main creremo un ciclo in modo che l'utente continui a giocare (eventualmente finchè ha soldi!) Chiederemo all'utente di inserire la puntata Quindi creeremo il tavolo da gioco con le 5 carte

25 Uno sguardo al main L'utente dovrà poter indicare quali carte vuol cambiare verranno cambiate le carte quindi verrà ristampato il nuovo tavolo calcolata la vincita aggiornato il portafoglio