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.