Ejercicio Cartas


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

}


Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos