1 Videopoker esempio di applicazione in java. 2 Videopoker Un giocatore, con un portofaglio iniziale...

25
1 Videopoker esempio di applicazione in java

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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