1 Videopoker esempio di applicazione in java. 2 Videopoker Un giocatore, con un portofaglio iniziale...
-
Upload
michela-olivieri -
Category
Documents
-
view
216 -
download
0
Transcript of 1 Videopoker esempio di applicazione in java. 2 Videopoker Un giocatore, con un portofaglio iniziale...
![Page 1: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/1.jpg)
1
Videopoker
esempio di applicazione in java
![Page 2: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/2.jpg)
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..)
![Page 3: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/3.jpg)
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
![Page 4: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/4.jpg)
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
![Page 5: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/5.jpg)
5
Classe Giocatore
• per il nome, ad esempio diventa
private String nome;
public getNome() { return nome;}
public void setName(String name)
{
this.name = name;
}
![Page 6: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/6.jpg)
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)
![Page 7: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/7.jpg)
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
![Page 8: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/8.jpg)
8
Classe Giocatoreper 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
![Page 9: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/9.jpg)
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
![Page 10: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/10.jpg)
10
Classe Giocatore
infine può essere utile definire un costruttore che riceva nome e portafoglio iniziale del nostro giocatorepublic Giocatore(String name, float portafoglio) {
this.name = name;
this.portafoglio = portafoglio;
}
nel main avremoGiocatore giocatore1 = new Giocatore("Ale", 55.0f);
![Page 11: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/11.jpg)
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.
![Page 12: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/12.jpg)
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
![Page 13: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/13.jpg)
13
Interface Mazzo
public interface Mazzo {
Carta estraiCarta();
void mescola();
int carteRimangono();
int numeroCarte();
}
![Page 14: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/14.jpg)
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)
![Page 15: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/15.jpg)
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
}
![Page 16: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/16.jpg)
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 ){
…..
}
![Page 17: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/17.jpg)
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
![Page 18: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/18.jpg)
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
![Page 19: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/19.jpg)
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;
} /* ……..*/
}
![Page 20: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/20.jpg)
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 */
![Page 21: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/21.jpg)
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++;
}
}
}
![Page 22: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/22.jpg)
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
![Page 23: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/23.jpg)
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)
![Page 24: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/24.jpg)
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
![Page 25: 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.](https://reader036.fdocuments.net/reader036/viewer/2022062702/5542eb72497959361e8d92d7/html5/thumbnails/25.jpg)
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