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);
}
}