La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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.

Presentazioni simili


Presentazione sul tema: "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."— Transcript della presentazione:

1 1 Videopoker esempio di applicazione in java

2 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 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 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 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 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 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 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 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 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 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 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 13 Interface Mazzo public interface Mazzo { Carta estraiCarta(); void mescola(); int carteRimangono(); int numeroCarte(); }

14 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 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 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 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 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 l'annotazione @Override

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

20 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 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 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 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 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 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


Scaricare ppt "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."

Presentazioni simili


Annunci Google