package com.trifulcas.cartas; public abstract class Carta { private String palo; private int numero; public Carta(String palo, int numero) { this.palo = palo; this.numero = numero; } protected String getPalo() { return palo; } protected void setPalo(String palo) { this.palo = palo; } public int getNumero() { return numero; } protected void setNumero(int numero) { this.numero = numero; } public abstract int getValor(); @Override public String toString() { return getNumero()+" de "+getPalo(); } } package com.trifulcas.cartas; public class Espanyola extends Carta { public Espanyola(String palo, int numero) { super(palo, numero); // TODO Auto-generated constructor stub } @Override public int getValor() { return getNumero()<10?getNumero():10; } } package com.trifulcas.cartas; public class Francesa extends Carta { public Francesa(String palo, int numero) { super(palo, numero); // TODO Auto-generated constructor stub } @Override public int getValor() { // TODO Auto-generated method stub return getNumero(); } } package com.trifulcas.cartas; import java.util.ArrayList; import java.util.Collections; public abstract class Baraja { protected ArrayList<Carta> baraja = new ArrayList<>(); public Baraja() { /* baraja.add(new Espanyola("oros",1)); baraja.add(new Espanyola("oros",2)); baraja.add(new Espanyola("oros",3)); baraja.add(new Espanyola("oros",4)); baraja.add(new Espanyola("copas",7)); */ } public void desordenar() { Collections.shuffle(baraja); } public Carta repartir() { if (baraja.isEmpty()) { return null; } else { return baraja.removeFirst(); } } @Override public String toString() { return "Baraja [baraja=" + baraja + "]"; } public abstract void crearMazo(); } package com.trifulcas.cartas; import java.util.ArrayList; import java.util.Arrays; public class BarajaEspanyola extends Baraja { @Override public void crearMazo() { ArrayList<Integer> numeros=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,10,11,12)); ArrayList<String> palos=new ArrayList<>(Arrays.asList("Oros","Copas","Espadas","Bastos")); baraja.clear(); for(int numero: numeros) { for(String palo: palos) { baraja.add(new Espanyola(palo,numero)); } } } } package com.trifulcas.cartas; import java.util.ArrayList; import java.util.Arrays; public class BarajaFrancesa extends Baraja { @Override public void crearMazo() { ArrayList<Integer> numeros=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13)); ArrayList<String> palos=new ArrayList<>(Arrays.asList("Picas","Tréboles","Corazones","Diamantes")); baraja.clear(); for(int numero: numeros) { for(String palo: palos) { baraja.add(new Francesa(palo,numero)); } } } } package com.trifulcas.cartas; import java.util.ArrayList; public class Jugador { private String nombre; private ArrayList<Carta> mano; public Jugador(String nombre) { super(); this.nombre = nombre; mano=new ArrayList<>(); } protected String getNombre() { return nombre; } protected void setNombre(String nombre) { this.nombre = nombre; } protected ArrayList<Carta> getMano() { return mano; } protected void setMano(ArrayList<Carta> mano) { this.mano = mano; } protected void setMano(Carta carta) { this.mano.add(carta); } @Override public String toString() { return "Jugador [nombre=" + nombre + ", mano=" + mano + "]"; } } package com.trifulcas.cartas; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Poquer { ArrayList<Jugador> jugadores; BarajaFrancesa baraja; public Poquer(ArrayList<Jugador> jugadores) throws Exception { if (jugadores.size()>10 || jugadores.size()<2) { throw new Exception("Número de jugadores incorrecto"); } this.jugadores=jugadores; baraja=new BarajaFrancesa(); baraja.crearMazo(); } public Jugador jugar() { baraja.desordenar(); for(Jugador j:jugadores) { for(int i=0;i<5;i++) { j.setMano(baraja.repartir()); } } return getGanador(); } public Jugador getGanador() { // poker: 4 cartas iguales // full: 3 cartas iguales y dos iguales // trio: 3 cartas iguales // doble pareja: 2 y 2 // pareja: 2 cartas iguales for (Jugador j:jugadores) { System.out.println(j); System.out.println(contarCartas(j.getMano())); } return jugadores.get(0); } public HashMap<Integer,Integer> contarCartas(ArrayList<Carta> cartas){ HashMap<Integer,Integer> res=new HashMap<Integer,Integer>(); for(Carta c:cartas) { res.put(c.getValor(), Collections.frequency(cartas.stream().map(Carta::getValor).toList(), c.getValor())); } return res; } } package com.trifulcas.cartas; import java.util.ArrayList; public class ProbarCartas { public static void main(String[] args) { // TODO Auto-generated method stub Baraja miBaraja=new BarajaFrancesa(); miBaraja.crearMazo(); System.out.println(miBaraja); Carta c=miBaraja.repartir() ; Jugador j=new Jugador("Ana"); System.out.println(j); System.out.println(c); System.out.println(miBaraja); miBaraja.desordenar() ; ArrayList<Jugador> jugadores=new ArrayList<>(); jugadores.add(j); jugadores.add(new Jugador("Eva")); try { Poquer test=new Poquer(jugadores); test.jugar(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(miBaraja); } }