Commit f61f5997 by Pedro Rolon

Se agregó el proyecto correspondiente a la tarea

parents
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_191">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v8.0">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="lib" path="lib/json-20180813.jar">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>jweb-e002</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="WebContent"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
<attributes>
<attribute name="hide" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
<classpathentry kind="output" path=""/>
</classpath>
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="jweb-e002">
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<property name="context-root" value="jweb-e002"/>
<property name="java-output-path" value="/jweb-e002/build/classes"/>
</wb-module>
</project-modules>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="Apache Tomcat v8.0"/>
<fixed facet="wst.jsdt.web"/>
<fixed facet="jst.web"/>
<fixed facet="java"/>
<installed facet="java" version="1.8"/>
<installed facet="jst.web" version="3.1"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
Manifest-Version: 1.0
Class-Path:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="clases.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Mejores Combinaciones</title>
</head>
<body style="background-color: #871b7c;">
<h1>Mejores Combinaciones</h1>
<hr>
<h2>Cartas Generadas Aleatoriamente</h2>
<%
Carta[] cartas = (Carta[])request.getAttribute("cartas");
for(int i=0; i<cartas.length; i++){
String nombreImagen="";
%>
<img src="imagenesCartas/<%= cartas[i].valor.toUpperCase()+cartas[i].palo.toUpperCase() %>.png" width=80 height="120">
<%}%>
<br>
<h2>Mejores Combinaciones</h2>
<%
Carta[] mano = new Carta[5];
String mejores = (String)request.getAttribute("mejores");
Poker p = new Poker();
//Separa el string en arrays, donde encuentre ";"
//Si hay ; quiere decir que hubieron dos o mas ganadores
for(int i=0; i<mejores.split(";").length; i++) {
//Los arrays resultantes de separar por ; lo separa por coma
for(int j=0; j<mejores.split(";")[i].split(",").length; j++) {
mano[j] = new Carta(mejores.split(";")[i].split(",")[j]);
%>
<img src="imagenesCartas/<%= mano[j].valor.toUpperCase()+mano[j].palo.toUpperCase() %>.png" width=80 height="120">
<%}%>
<h4><%=p.nombreJugada(mano)%></h4>
<br>
<%}%>
</body>
</html>
\ No newline at end of file
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<img src= "<%=request.getAttribute("rutaImagen") %>" width=200 height=250 >
</body>
</html>
\ No newline at end of file
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="clases.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Mano doc desde api</title>
</head>
<body style="background-color: #ced5e0;">
<h1>Cartas!</h1>
<hr>
<h2>Manos Aleatorias extraidas desde api</h2>
<%Carta[] cartas = (Carta[])request.getAttribute("mano");
String nombreJugada = (String) request.getAttribute("nombreJugada");
for(int i=0; i<cartas.length; i++){
%>
<img src="<%="imagenesCartas/"+ cartas[i].valor+cartas[i].palo+".png" %>" width=80 height=120>
<%
}
%>
<h3>Jugada: <%=nombreJugada%></h3>
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>jweb-e002</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Cartas de Poker</h1>
<hr>
<form action="/jweb-e002/dibujar_carta" method="get">
Palo: <select name="palo">
<option value="s">S</option>
<option value="h">H</option>
<option value="c">C</option>
<option value="d">D</option>
</select>
<br>
Valor: <input type="text" name="valor">
<input type="submit">
</form>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<ul>
<li><a href="html/cartas.html">Cartas</a></li>
<li><a href="SieteCartas">7 Cartas</a></li>
<li><a href="mano_doc">Usando API</a></li>
</ul>
</body>
</html>
\ No newline at end of file
package clases;
public class Carta {
public Carta()
{
}
public Carta(String completo)
{
this.valor = String.valueOf(completo.charAt(0));
this.palo = String.valueOf(completo.charAt(1));
}
String valorPalo()
{
return this.valor + this.palo;
}
public String valor;
public String palo;
}
package clases;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import clases.Carta;
//import com.roshka.bootcamp004.poker.MyClass;
public class Poker {
// TH, TC, 5S, 5H, AD, AH, 2S
public String mejorJugada(Carta[] mano)
{
ArrayList<Carta[]> candidatas = new ArrayList<Carta[]>();
ArrayList<Carta[]> mejores = new ArrayList<Carta[]>();
String mejoresString="";
Carta[] cartas = mano;
//Crea una mano de 5 cartas que va a seguir igual siempre
Carta [] manoPrincipal = new Carta[5];
//Crea una mano de 5 cartas que va a variar para crear las
//distintas combinaciones
Carta [] manoVariante = new Carta[5];
//Carga las primeras 5 cartas en la mano
for (int i = 0; i < 5; i++) {
manoPrincipal[i] = new Carta(cartas[i].valor+cartas[i].palo);
}
manoVariante = manoPrincipal.clone();
//Se agrega la primera combinación a las manos candidatas
candidatas.add(manoVariante.clone());
//Las dos ultimas cartas las guarda en variables diferentes
Carta x = cartas[5];
Carta y = cartas[6];
//Se crean las combinaciones
for (int i = 0; i < 5; i++) {
//Rota la x
manoVariante[i] = x;
//Agrego una copia de la mano variante para no tener problemas
//Con la modificacion de los valores
//Por el tema de paso por referencia
candidatas.add(manoVariante.clone());
//Es para no repetir combinaciones. Esta repeticion
//se da en la cuarta iteración
//if(i!=4){
for(int j = i; j < 5; j++){
//Se usa una variable auxiliar para volver a poner el valor
//que se cambió como estaba
Carta aux = manoVariante[j];
//Rota la y cuando la x está rotando
manoVariante[j]= y;
//Se agrega una copia a las candidatas
candidatas.add(manoVariante.clone());
//Vuelve la mano variante a su estado original
manoVariante[j] = aux;
}
/*}else{
//Solo faltaría agregar una rotación, cuando la y está al final
manoVariante[i]=y;
candidatas.add(manoVariante.clone());
}*/
manoVariante = manoPrincipal.clone();
}
/*
for (int i = 0; i < candidatas.size(); i++) {
System.out.println("Combinacion número: "+(i+1));
System.out.println(candidatas.get(i)[0].valor+candidatas.get(i)[0].palo);
System.out.println(candidatas.get(i)[1].valor+candidatas.get(i)[1].palo);
System.out.println(candidatas.get(i)[2].valor+candidatas.get(i)[2].palo);
System.out.println(candidatas.get(i)[3].valor+candidatas.get(i)[3].palo);
System.out.println(candidatas.get(i)[4].valor+candidatas.get(i)[4].palo);
System.out.println("******");
}
*/
//System.out.println(candidatas.size());
//Crea una instancia de MyClass, que contiene
//el método que elige cuál es la mejor jugada
//MyClass mc = new MyClass();
//Crea un vector string con los índices de los ganadores
String[] mejoresCombinaciones = ganadores(candidatas).split(" ");
//System.out.println("Cantidad de ganadores: "+ mejoresCombinaciones.length);
//System.out.println("Indice de los ganadores: "+mc.ganadores(candidatas));
//Imprime las mejores combinaciones
/*for (int j = 0; j < mejoresCombinaciones.length; j++) {
//Convierte los indices de los ganadores que están en String
//a int
int index = Integer.parseInt(mejoresCombinaciones[j]);
for (int i = 0; i < 5; i++) {
System.out.print(candidatas.get(index)[i].valor+candidatas.get(index)[i].palo+" ");
}
System.out.println();
}*/
for (int j = 0; j < mejoresCombinaciones.length; j++) {
//Convierte los indices de los ganadores que están en String
//a int
int index = Integer.parseInt(mejoresCombinaciones[j]);
mejores.add(candidatas.get(index).clone());
}
//Carga mejoresString, que contiene los resultados del vector mejores
//pero en String, todo concatenado
//También imprime el contenido de "mejores"
for (int j = 0; j < mejores.size(); j++) {
//Convierte los indices de los ganadores que están en String
//a int
//int index = Integer.parseInt(mejoresCombinaciones[j]);
for (int i = 0; i < 5; i++) {
mejoresString += mejores.get(j)[i].valor+mejores.get(j)[i].palo;
//System.out.print(candidatas.get(j)[i].valor+candidatas.get(j)[i].palo);
if(i!=4){
//System.out.print(",");
mejoresString += ",";
}
}
//System.out.println();
if(j!=mejores.size()-1)
mejoresString += ";";
}
return mejoresString;
//return "AD,AH,TH,TC,5S;AD,AH,TH,TC,5H";
}
public String ganadores(List<Carta[]> jugadas)
{
//System.out.println("Cantidad de jugadas: " + jugadas.size());
ArrayList<Carta[]> ganadores = new ArrayList<Carta[]>();
//Indica que es la primera mano
boolean esPrimero=true;
//Array para almacenar los índices
ArrayList<Integer> indices = new ArrayList<Integer>();
//Contador que mantiene el valor del indice
int index=0;
for (Carta[] mano : jugadas) {
// System.out.println("JUGADA ======================");
if(esPrimero){
ganadores.add(mano);
indices.add(index);
esPrimero=false;
}
else{
ArrayList<Integer> calificacionMayor= calificacion(ganadores.get(ganadores.size()-1));
ArrayList<Integer> calificacionActual= calificacion(mano);
if(calificacionMayor.get(0)<calificacionActual.get(0)){
ganadores.clear();
indices.clear();
indices.add(index);
ganadores.add(mano);
}
else if(calificacionMayor.get(0)==calificacionActual.get(0)){
for (int i = 1; i < calificacionMayor.size(); i++) {
if(calificacionMayor.get(i)<calificacionActual.get(i)){
ganadores.clear();
indices.clear();
indices.add(index);
ganadores.add(mano);
break;
}
else if(calificacionMayor.get(i)>calificacionActual.get(i)){
break;
}
//Si la i llega al tamaño máximo del array, quiere decir
//que son todos iguales
else if(i==calificacionMayor.size()-1){
ganadores.add(mano);
indices.add(index);
}
}
}
}
index++;
}
//imprimirGanadores(ganadores);
String stringGanadores="";
for (int i = 0; i < indices.size(); i++) {
stringGanadores += indices.get(i)+" ";
}
return stringGanadores;
}
private ArrayList<Integer> calificacion(Carta[] mano){
ArrayList<Integer> calificacion= new ArrayList<Integer>();
/**
* La calificacion numérica de cada carta estará en el lugar 0 del array retornado
* Escalera color -> 9
* Poker -> 8
* Full -> 7
* Color -> 6
* Escalera -> 5
* Trio -> 4
* Par Doble -> 3
* Par -> 2
* Carta alta -> 1
*/
//Array para almacenar la cantidad de apariciones de cada número
int[] valores = new int[13];
//Array para almacenar la cantidad de apariciones de cada palo
int[] palos = new int[4];
inicializarArrays(valores, palos, mano);
//Si es escalera, solo basta ver el valor de la escalera
if(esEscaleraColor(valores, palos)){
int[] ordenado = ordenarMano(mano);
calificacion.add(9);
//Si el AS actúa como 14, entonces el AS vale 14
if(ordenado[4]==12 && ordenado[0]==0){
calificacion.add(14);
}
else{
calificacion.add(ordenado[4]);
}
}
else if(esPoker(valores)){
//Si es poker, se envia la calificacion en el primer elemento, seguido del
//valor que hizo que sea poker, seguido del valor diferente
calificacion.add(8);
if(indiceDe(4,valores)==0){
calificacion.add(14);
calificacion.add(indiceDe(1,valores));
}
else{
calificacion.add(indiceDe(4,valores));
if(indiceDe(1, valores)==0){
calificacion.add(14);
}
else{
calificacion.add(indiceDe(1, valores));
}
}
}
else if(esFull(valores)){
//No hay empate en full, por lo tanto solo hace falta
//el valor de la mano
calificacion.add(7);
if(indiceDe(3,valores)==0){
calificacion.add(14);
calificacion.add(indiceDe(2,valores));
}
else{
calificacion.add(indiceDe(3,valores));
if(indiceDe(2, valores)==0){
calificacion.add(14);
}
else{
calificacion.add(indiceDe(2,valores));
}
}
}
else if(esColor(palos)){
int aux=0;
calificacion.add(6);
int[] ordenado = ordenarMano(mano);
if(ordenado[0]==0){
calificacion.add(14);
aux=1;
}
for (int i = 4; i >= aux; i--) {
calificacion.add(ordenado[i]);
}
}
else if(esEscalera(valores)){
int[] ordenado = ordenarMano(mano);
calificacion.add(5);
if(ordenado[4]==12 && ordenado[0]==1){
calificacion.add(14);
}
else{
calificacion.add(ordenado[4]);
}
}
else if(esTrio(valores)){
calificacion.add(4);
//Convierte el AS al mayor valor, en lugar de 1 vale 14
if(indiceDe(3,valores)==0){
calificacion.add(14);
}else{
calificacion.add(indiceDe(3, valores));
}
int[] ordenado = ordenarMano(mano);
int aux = 0;
if(ordenado[0]==0){
calificacion.add(14);
aux = 1;
}
for (int i = 4; i >=aux; i--) {
if(calificacion.get(1)!=ordenado[i]){
calificacion.add(ordenado[i]);
}
}
}
else if(esParDoble(valores)){
calificacion.add(3);
//Si es un par doble de AS, se le asigna 14
if(indiceDe(2,valores)==0){
calificacion.add(14);
calificacion.add(indiceDeReversa(2, valores));
}
else{
calificacion.add(indiceDeReversa(2, valores));
calificacion.add(indiceDe(2, valores));
}
if(indiceDe(1,valores)==0){
calificacion.add(14);
}
else{
calificacion.add(indiceDe(1,valores));
}
}
else if(esPar(valores)){
calificacion.add(2);
//Si el par es de AS, se setea su valor a 14
if(indiceDe(2,valores)==0){
calificacion.add(14);
}
else{
calificacion.add(indiceDe(2, valores));
}
int[] ordenado = ordenarMano(mano);
int aux=0;
if(ordenado[0]==0){
calificacion.add(14);
aux=1;
}
for (int i = 4; i >=aux; i--) {
if(calificacion.get(1)!=ordenado[i]){
calificacion.add(ordenado[i]);
}
}
}
else{
int aux=0;
calificacion.add(1);
//Si hay un AS, se coloca directamente después de la
//calificación
int[] ordenado = ordenarMano(mano);
if(ordenado[0]==0){
calificacion.add(14);
aux=1;
}
for (int i = 4; i >= aux; i--) {
calificacion.add(ordenado[i]);
}
}
return calificacion;
}
private int indiceDe(int elemento, int[] vector){
for (int i = 0; i < vector.length; i++) {
if(vector[i]==elemento) return i;
}
//retorna -1 si no encuentra;
return -1;
}
private int indiceDeReversa(int elemento, int[] vector){
for (int i = vector.length-1; i >=0; i--) {
if(vector[i]==elemento) return i;
}
//retorna -1 si no encuentra;
return -1;
}
private int[] ordenarMano(Carta[] mano){
int[] ordenado = new int[5];
for (int i = 0; i < 5; i++) {
String valorString= mano[i].valor;
if(valorString.equals("A") || valorString.equals("a")){
ordenado[i]=0;
}
else if(valorString.equals("T") || valorString.equals("t")){
ordenado[i]=9;
}
else if(valorString.equals("J") || valorString.equals("j")){
ordenado[i]=10;
}
else if(valorString.equals("Q") || valorString.equals("q")){
ordenado[i]=11;
}
else if(valorString.equals("K") || valorString.equals("k")){
ordenado[i]=12;
}
else{
ordenado[i] = Integer.parseInt(valorString)-1;
}
}
Arrays.sort(ordenado);
return ordenado;
}
private boolean esEscaleraColor(int[] valores, int[] palos){
/**
* Funcionamiento: recorre el vector de valores y cuando encuentra un 1
* enciende una bandera para comenzar a contar.
* Termina el ciclo cuando ya no quedan elementos o cuando encuentra un número
* distinto a 1. Si este número es mayor a 1, entonces termina el ciclo.
* Si el contador termina en 5, se comprueba que todos los palos sean iguales.
* esto se consigue revisando si en el vector de palos hay un 5, porque esto significa
* que todos fueron iguales
* O si hay un 4 en el contador y una A presente, también es verdadero
*/
//bandera para activar sumador
boolean sumadorActivo=false;
//Sumador de números contiguos
int sumador=0;
//no se comprueba si existe A, porque despues se comprueba
//si el contador llegó a 4 y existe una A, entonces es una
//escalera
for (int i = 1; i < 13; i++) {
//Si la cantidad de aparición de un valor fue mayor a 1,
//no es posible que sea una escalera
if(valores[i]>1){
return false;
}
if(valores[i]==1){
sumadorActivo=true;
}
if(valores[i]==0 && sumadorActivo){
break;
}
if(sumadorActivo){
sumador++;
}
}
//Si el sumador llegó a 5 entra al ciclo que comprueba
//o si llegó a 4 y existe una A
//si alguno de los palos vino 5 veces
if(sumador==5 || (sumador==4 && valores[0]==1 && valores[9]==1 && valores[8]==0)){
for (int i = 0; i < 4; i++) {
if(palos[i]==5){
return true;
}
}
}
return false;
}
//Comprueba si la mano es póker
private boolean esPoker(int[] valores){
/**
* Funcionamiento: Ordena el array de valores de forma ascendente.
* Para comprobar si existe poker, basta con mirar el último elemento del array,
* donde debería encontrarse un 4
*/
//Clona el array de valores
int [] ordenado = valores.clone();
//Ordena la copia
Arrays.sort(ordenado);
if(ordenado[12]==4){
return true;
}
return false;
}
private boolean esFull(int[] valores){
//Clona el array de valores
int [] ordenado = valores.clone();
//Ordena la copia
Arrays.sort(ordenado);
if(ordenado[12]==3 && ordenado[11]==2)
return true;
return false;
}
private boolean esColor(int[] palos){
//Clona el array de valores
int [] ordenado = palos.clone();
//Ordena la copia
Arrays.sort(ordenado);
if(ordenado[3]==5)
return true;
return false;
}
private boolean esEscalera(int[] valores){
//bandera para activar sumador
boolean sumadorActivo=false;
//Sumador de números contiguos
int sumador=0;
//no se comprueba si existe A, porque despues se comprueba
//si el contador llegó a 4 y existe una A, entonces es una
//escalera
for (int i = 1; i < 13; i++) {
//Si la cantidad de aparición de un valor fue mayor a 1,
//no es posible que sea una escalera
if(valores[i]>1){
return false;
}
if(valores[i]==1){
sumadorActivo=true;
}
if(valores[i]==0 && sumadorActivo){
break;
}
if(sumadorActivo){
sumador++;
}
}
//Si el sumador llegó a 5 entra al ciclo que comprueba
//o si llegó a 4 y existe una A
if(sumador==5 || (sumador==4 && valores[0]==1 && valores[9]==1 && valores[8]==0)){
return true;
}
return false;
}
private boolean esTrio(int[] valores){
//Clona el array de valores
int [] ordenado = valores.clone();
//Ordena la copia
Arrays.sort(ordenado);
if(ordenado[12]==3 && ordenado[11]==1 && ordenado[10]==1)
return true;
return false;
}
private boolean esParDoble(int[] valores){
//Clona el array de valores
int [] ordenado = valores.clone();
//Ordena la copia
Arrays.sort(ordenado);
if(ordenado[12]==2 && ordenado[11]==2 && ordenado[10]==1)
return true;
return false;
}
private boolean esPar(int[] valores){
//Clona el array de valores
int [] ordenado = valores.clone();
//Ordena la copia
Arrays.sort(ordenado);
if(ordenado[12]==2 && ordenado[11]==1 && ordenado[10]==1 && ordenado[9]==1)
return true;
return false;
}
private void inicializarArrays(int[] valores, int[] palos, Carta[] mano){
//Se coloca 1 y 14 para que sea mas facil controlar las Escaleras
for (int i = 0; i < 13; i++) {
valores[i]=0;
}
for (int i = 0; i < 4; i++) {
palos[i] = 0;
}
//carga los vectores de cantidades de aparición
for (int i = 0; i < 5; i++) {
String valorString = mano[i].valor;
String paloString = mano[i].palo;
if(valorString.equals("A") || valorString.equals("a")){
valores[0]++;
}
else if(valorString.equals("T") || valorString.equals("t")){
valores[9]++;
}
else if(valorString.equals("J") || valorString.equals("j")){
valores[10]++;
}
else if(valorString.equals("Q") || valorString.equals("q")){
valores[11]++;
}
else if(valorString.equals("K") || valorString.equals("k")){
valores[12]++;
}
else if(valorString.equals("J") || valorString.equals("j")){
valores[10]++;
}
else{
int index = Integer.parseInt(valorString);
valores[index-1]++;
}
//Para el array de cantidades de palos
//S -> 0
//C -> 1
//H -> 2
//D -> 3
if(paloString.equals("S") || paloString.equals("s")){
palos[0]++;
}
else if(paloString.equals("C") || paloString.equals("c")){
palos[1]++;
}
else if(paloString.equals("H") || paloString.equals("h")){
palos[2]++;
}
else if(paloString.equals("D") || paloString.equals("d")){
palos[3]++;
}
}
}
//Este metodo genera n cantidad de cartas al azar
public Carta[] generarCartas(int n) {
Carta[] cartas = new Carta[n];
Random random = new Random();
String nuevaCarta = "";
int valor;
int palo;
for(int i=0; i<n; i++) {
valor = random.nextInt(13) + 1;
if(valor==1) {
nuevaCarta += "A";
}
else if(valor==10) {
nuevaCarta += "T";
}
else if(valor==11) {
nuevaCarta += "J";
}
else if(valor==12) {
nuevaCarta += "Q";
}
else if(valor==13) {
nuevaCarta += "K";
}
else {
nuevaCarta += valor;
}
palo = random.nextInt(4) + 1;
if(palo==1){
nuevaCarta += "H";
}
else if(palo==2){
nuevaCarta += "S";
}
else if(palo==3){
nuevaCarta += "D";
}
else if(palo==4){
nuevaCarta += "C";
}
cartas[i] = new Carta(nuevaCarta);
nuevaCarta = "";
}
return cartas;
}
public String nombreJugada(Carta[] mano)
{
//Array para almacenar la cantidad de apariciones de cada número
int[] cantidadValores = new int[13];
//Array para almacenar la cantidad de apariciones de cada palo
int[] cantidadPalos = new int[4];
inicializarArrays(cantidadValores, cantidadPalos, mano);
if(esEscaleraColor(cantidadValores, cantidadPalos))
return "ESCALERA COLOR";
if(esPoker(cantidadValores))
return "POKER";
if(esFull(cantidadValores))
return "FULL";
if(esColor(cantidadPalos))
return "COLOR";
if(esEscalera(cantidadValores))
return "ESCALERA";
if(esTrio(cantidadValores))
return "TRIO";
if(esParDoble(cantidadValores))
return "PAR DOBLE";
if(esPar(cantidadValores))
return "PAR";
return "CARTA ALTA";
}
//Clase main para probar
/*
public static void main(String[] args) {
Carta[] a = new Carta[7];
a[0] = new Carta("TH");
a[1] = new Carta("TC");
a[2] = new Carta("5S");
a[3] = new Carta("5H");
a[4] = new Carta("AD");
a[5] = new Carta("AH");
a[6] = new Carta("2S");
Poker p = new Poker();
System.out.println(p.mejorJugada(a));
}*/
}
package servlets;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Cartas
*/
@WebServlet("/dibujar_carta")
public class Cartas extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Cartas() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String palo = request.getParameter("palo").toUpperCase();
String valor = request.getParameter("valor").toUpperCase();
String rutaImagen = "imagenesCartas/"+valor+palo+".png";
System.out.println(rutaImagen);
request.setAttribute("rutaImagen", rutaImagen);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/WEB-INF/jsp/cartas.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
package servlets;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;
import org.json.JSONObject;
import clases.Carta;
import clases.Poker;
/**
* Servlet implementation class ManoDoc
*/
@WebServlet("/mano_doc")
public class ManoDoc extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ManoDoc() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = "https://deckofcardsapi.com/api/deck/new/draw/?count=5";
String json = obtenerJson(url);
Carta[] mano = obtenerCartas(json);
Poker p = new Poker();
String nombreJugada = p.nombreJugada(mano);
for(int i=0; i<mano.length; i++) {
System.out.println(mano[i].valor + mano[i].palo);
}
System.out.println(nombreJugada);
System.out.println("************************");
request.setAttribute("mano", mano);
request.setAttribute("nombreJugada", nombreJugada);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/WEB-INF/jsp/mano_doc.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
public static String obtenerJson(String myURL) {
System.setProperty("http.agent", "Chrome");
System.out.println("Requeted URL:" + myURL);
StringBuilder sb = new StringBuilder();
URLConnection urlConn = null;
InputStreamReader in = null;
try {
URL url = new URL(myURL);
urlConn = url.openConnection();
if (urlConn != null)
urlConn.setReadTimeout(60 * 1000);
if (urlConn != null && urlConn.getInputStream() != null) {
in = new InputStreamReader(urlConn.getInputStream(),
Charset.defaultCharset());
BufferedReader bufferedReader = new BufferedReader(in);
if (bufferedReader != null) {
int cp;
while ((cp = bufferedReader.read()) != -1) {
sb.append((char) cp);
}
bufferedReader.close();
}
}
in.close();
} catch (Exception e) {
throw new RuntimeException("Exception while calling URL:"+ myURL, e);
}
return sb.toString();
}
public Carta[] obtenerCartas(String json) {
JSONObject obj = new JSONObject(json);
JSONArray cartas = obj.getJSONArray("cards");
Carta[] mano= new Carta[5];
for(int i=0; i<mano.length;i++) {
String valor = cartas.getJSONObject(i).getString("code").substring(0, 1);
String palo = cartas.getJSONObject(i).getString("code").substring(1, 2);
if(valor.equals("0")) {
valor = "T";
}
String carta = valor+palo;
mano[i] = new Carta(carta);
}
return mano;
}
}
package servlets;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import clases.*;
/**
* Servlet implementation class SieteCartas
*/
@WebServlet("/SieteCartas")
public class SieteCartas extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SieteCartas() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Poker p = new Poker();
Carta [] cartas;
//Genera las cartas aleatoriamente y las almacena en un array de Cartas
cartas = p.generarCartas(7);
String mejores = p.mejorJugada(cartas);
request.setAttribute("cartas", cartas);
request.setAttribute("mejores", mejores);
/*
//Imprime las cartas generadas aleatoriamente
for(int i=0 ;i<cartas.length; i++) {
System.out.println(cartas[i].valor+cartas[i].palo);
}
System.out.println("******");
//Encuentra las mejores jugadas de todas las combinaciones posibles de 7 cartas tomadas de a 5
//y las guarda en un string llamado mejores
System.out.println(mejores);
System.out.println("******");
*/
//Se define un array de cartas para almacenar la mano que será evaluada
//y de quien se obtendrá el nombre de jugada
Carta[] mano = new Carta[5];
//Separa el string en arrays, donde encuentre ";"
//Si hay ; quiere decir que hubieron dos o mas ganadores
for(int i=0; i<mejores.split(";").length; i++) {
//Los arrays resultantes de separar por ; lo separa por coma
for(int j=0; j<mejores.split(";")[i].split(",").length; j++) {
mano[j] = new Carta(mejores.split(";")[i].split(",")[j]);
System.out.println(mano[j].valor+mano[j].palo);
}
System.out.println(p.nombreJugada(mano));
System.out.println("************");
}
RequestDispatcher rd = getServletContext().getRequestDispatcher("/WEB-INF/jsp/SieteCartas.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment