Help su come creare 5 mani del gioco del poker

di il
1 risposte

Help su come creare 5 mani del gioco del poker

Salve è un pò di mesi che studio java a breve ho un importante colloquio,anche se ho molte difficoltà a programmare bene.Volevo un parere su un programma che simuli 5 mani di poker.ho trovato molte difficoltà ma ancora non ce l ho fatta.ho cominciato creando la classe Card:
public class Card {
String face;
String seme;
public Card (String cardFace,String cardSeme)
{
face=cardFace;
seme=cardSeme;
}
public String toString()
{
return "*" + face+ " di " + seme+"*";
}

successivamente una classe MazzodiCarte,che dovrebbe mischiare e distribuire le carte casualmente.

import java.util.Random;
public class MazzodiCarte {
public Card mazzo [] ;
public int cartaCorrente;
public final int numerocarte=52;
public Random NumeriCasuali;


public MazzodiCarte()
{
String faces[]={"asso","due","tre","quattro","cinque","sei","sette","otto","nove","dieci","jack","regina","re"};
String semes[]={"cuori","quadri","picche","fiori"};
mazzo = new Card [numerocarte];
cartaCorrente=0;
NumeriCasuali=new Random();
for(int count=0;count<mazzo.length;count++)
mazzo[count]=new Card (faces[count % 13] , semes[count / 13]);
}
public void mescola()
{
cartaCorrente =0;
for(int prima=0;prima<mazzo.length;prima++)
{
int seconda=NumeriCasuali.nextInt(numerocarte);
Card temp=mazzo[prima];
mazzo[prima]=mazzo[seconda];
mazzo[seconda]=temp;
}
}

public Card [] mazzomario=new Card[4];

public Card daiCarta()
{
if(cartaCorrente <mazzo.length)

return mazzo[cartaCorrente++];
else
return null;
}
e infine una classe per far funzionare il tutto:

public class Run {
public static void main(String[] args) {
MazzodiCarte mioMazzodiCarte=new MazzodiCarte();
mioMazzodiCarte.mescola();
for(int i=0; i<13;i++)
{
System.out.printf("%-20s%-20s%-20s%-20s\n",mioMazzodiCarte.daiCarta(),
mioMazzodiCarte.daiCarta(),mioMazzodiCarte.daiCarta(),
mioMazzodiCarte.daiCarta());


}
} }

non so se è giusto fin qui comunque non riesco a capire come distribuire e stabilire i punteggi che un giocatore può avere.qualcuno ha qualche idea??

1 Risposte

  • Re: Help su come creare 5 mani del gioco del poker

    Ciao, vorrei provare a proporti una soluzione, si object oriented, ma che faccia uso delle enumerazioni per realizzare il tuo programma.L'ho scritto velocemente,manca la gestione delle eventuali eccezioni,ho fatto un pò di prove e mi sembra ok, ti scrivo le classi:

    public enum Seme {
    CUORI,QUADRI,FIORI,PICCHE
    }

    public enum Valore {
    ASSO,DUE,TRE,QUATTRO,CINQUE,SEI,SETTE,OTTO,NOVE,DIECI,JACK,REGINA,RE
    }

    public class Carta implements Comparable<Carta> {

    private Seme seme;
    private Valore valore;

    public Seme getSeme() {
    return seme;
    }
    public void setSeme(Seme seme) {
    this.seme = seme;
    }
    public Valore getValore() {
    return valore;
    }
    public void setValore(Valore valore) {
    this.valore = valore;
    }
    @Override
    public int compareTo(Carta o) {
    // TODO Auto-generated method stub
    return valore.compareTo(o.valore);
    }

    }


    public class Mano {

    private List<Carta> carte;

    public Mano(){
    carte = new ArrayList<Carta>();
    }

    public void aggiungiCarta(Carta carta){
    carte.add(carta);
    }

    public void stampa(){
    for(Carta c : carte){
    System.out.print(c.getValore().toString()
    +"-"+c.getSeme().toString());
    System.out.print(" ");
    }
    }

    public List<Carta> getCarte() {
    return carte;
    }

    }

    public class Mazzo {

    private List<Carta> carte;

    private int posizioneNelMazzo=0;

    public Mazzo(){

    carte = new ArrayList<Carta>();
    for(Seme s : Seme.values() ){
    for(Valore v: Valore.values()){
    Carta carta = new Carta();
    carta.setSeme(s);
    carta.setValore(v);
    carte.add(carta);
    }
    }

    }

    public void mischia(){
    Collections.shuffle(carte);
    posizioneNelMazzo=0;
    }

    public Mano getMano(){
    Mano m = new Mano();
    m.aggiungiCarta(carte.get(0+posizioneNelMazzo));
    m.aggiungiCarta(carte.get(1+posizioneNelMazzo));
    m.aggiungiCarta(carte.get(2+posizioneNelMazzo));
    m.aggiungiCarta(carte.get(3+posizioneNelMazzo));
    m.aggiungiCarta(carte.get(4+posizioneNelMazzo));
    posizioneNelMazzo+=5;
    return m;
    }
    }

    public enum Punteggio {

    CARTA_ALTA,COPPIA,DOPPIA_COPPIA,TRIS,SCALA,COLORE,FULL_HOUSE,POKER,SCALA_COLORE,SCALA_REALE;

    public static Punteggio calcolaPunteggio(Mano mano){

    List<Carta> carte = mano.getCarte();

    Collections.sort(carte);

    boolean carteStessoColore=true;
    boolean carteInSequenza=true;

    Carta prima = carte.get(0);

    for(int i=1;i<carte.size();i++){
    if(carte.get(i).getSeme()!=prima.getSeme()){
    carteStessoColore=false;
    }
    if(carte.get(i-1).getValore()
    .compareTo(carte.get(i).getValore())!= 1 ){
    carteInSequenza=false;
    }
    if(!carteStessoColore && !carteInSequenza){
    break;
    }
    }

    if(carteStessoColore && carteInSequenza){
    return SCALA_REALE;
    }else if(carteStessoColore){
    return COLORE;
    }else if (carteInSequenza){
    return SCALA;
    }

    boolean quattroCarteUguali=true;


    for(int i=1;i<carte.size();i++){

    if(carte.get(i-1).getValore()
    .compareTo(carte.get(i).getValore())!= 0 ){

    for(int j=2;j<carte.size();j++){
    if(carte.get(j-1).getValore()
    .compareTo(carte.get(j).getValore())!= 0 ){
    quattroCarteUguali=false;
    break;
    }
    }

    }
    }

    boolean treCarteUguali=true;

    for(int i=1;i<3;i++){
    if(carte.get(i-1).getValore()
    .compareTo(carte.get(i).getValore())!= 0 ){
    for(int j=3;j<=4;j++){
    if(carte.get(j-1).getValore()
    .compareTo(carte.get(j).getValore())!= 0 ){
    treCarteUguali=false;
    break;
    }
    }
    }
    }

    boolean dueCarteUguali=true;

    if(treCarteUguali){
    if(carte.get(0).getValore().compareTo(carte.get(1).getValore())
    ==0 &&
    carte.get(1).getValore().compareTo(carte.get(2).getValore())==0 ){
    if(carte.get(3).getValore().compareTo(carte.get(4).getValore())
    !=0){
    dueCarteUguali=false;
    }
    }else if(carte.get(0).getValore().compareTo(carte.get(1).getValore())
    !=0){
    dueCarteUguali=false;
    }

    }


    if(quattroCarteUguali){
    return POKER;
    }else if (treCarteUguali && dueCarteUguali){
    return FULL_HOUSE;
    }else if(treCarteUguali){
    return TRIS;
    }

    int numeroCoppie=0;

    for(int i=1;i<carte.size();i++){

    if(carte.get(i-1).getValore()
    .compareTo(carte.get(i).getValore())== 0 ){
    numeroCoppie++;
    if(numeroCoppie==2){
    return DOPPIA_COPPIA;
    }
    }
    }
    if(numeroCoppie==1){
    return COPPIA;
    }
    return CARTA_ALTA;
    }

    }

    public class Poker {
    public static void main(String[] args){
    Mazzo mazzo = new Mazzo();
    mazzo.mischia();
    Mano m = mazzo.getMano();
    m.stampa();
    System.out.println();
    System.out.println(Punteggio.calcolaPunteggio(m));
    m = mazzo.getMano();
    m.stampa();
    System.out.println();
    System.out.println(Punteggio.calcolaPunteggio(m));
    }
    }

    spero di esserti stato di aiuto.
Devi accedere o registrarti per scrivere nel forum
1 risposte