Poker.java 5.19 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179


public class Poker {
	
	// TH, TC, 5S, 5H, AD, AH, 2S  
	public String mejorJugada(Carta[] mano)
	{	
		//Verificamos cada tipo de jugada de poker
		if (escaleraReal(mano)) 
			return "La mano es una escalera real";
		if (escaleraColor(mano)) 
			return "La mano es una escalera color";
		if(esPoker(mano))
			return "La mano es Poker";
		if(fullHouse(mano))
			return "La mano es un Full House";
		if(color(mano))
			return "La mano es un Color";
		if(escalera(mano))
			return "La mano es una escalera";
		if(esTriple(mano))
			return "La mano es un Triple";
		if(esDobleDoble(mano))
			return "La mano es una doble pareja";
		if(esDoble(mano))
			return "La mano es una Pareja Doble";
		
		return "La mano solo posee carta alta ";
	}
	public boolean color(Carta[] cartas){
		//obtenemos el vector ordenado
		int ordenado[]=ordenarValor(cartas);
			//comprobamos si son del mismo palo
			char valor1= cartas[0].palo.charAt(0);
			char valor2= cartas[1].palo.charAt(0);
			char valor3= cartas[2].palo.charAt(0);
			char valor4= cartas[3].palo.charAt(0);
			char valor5= cartas[4].palo.charAt(0);
			if (valor1==valor2 &&  valor1==valor3 && valor4==valor1 && valor1==valor5) 
				return true;
		return false;
	}
	public boolean esDobleDoble(Carta [] carta){
		//obtenemos el vector ordenado
		int vec[]=ordenarValor(carta);
		//si son dos numeros iguales entonces es una pareja de dos
		if (vec[0]==vec[1] && vec[2]==vec[3] || vec[0]==vec[1] && vec[3]==vec[4] )   
			return true;
		if (vec[1]==vec[2] && vec[3]==vec[4] )   
			return true;
		return false;
	}
	public boolean esDoble(Carta [] carta){
		//obtenemos el vector ordenado
		int vec[]=ordenarValor(carta);
		//si son dos numeros iguales entonces es una pareja de dos
		if (vec[0]==vec[1] || vec[1]==vec[2] || vec[2]==vec[3] || vec[3]==vec[4])   
			return true;
		
		return false;
	}
	public boolean esTriple(Carta [] carta){
		//obtenemos el vector ordenado
		int vec[]=ordenarValor(carta);
		//si son tres numeros iguales entonces es un triple
		if (vec[0]==vec[1] && vec[1]==vec[2] || vec[1]==vec[2] && vec[2]==vec[3])   
				return true;
		if (vec[2]==vec[3] && vec[3]==vec[4])   
			return true;
		return false;
	}
	public boolean escalera(Carta [] carta){
		//obtenemos el vector ordenado
		int ordenado[]=ordenarValor(carta);
		//si son numeros sucesivos entonces es una escalera
		if (ordenado[0]+1==ordenado[1] && ordenado[1]+1==ordenado[2] && ordenado[2]+1==ordenado[3] && ordenado[3]+1==ordenado[4] )   
				return true;
		return false;
		
	}
	public boolean escaleraColor(Carta[] cartas){
		//obtenemos el vector ordenado
		int ordenado[]=ordenarValor(cartas);
		
		//si son numeros sucesivos entonces es una escalera
		if (ordenado[0]+1==ordenado[1] && ordenado[1]+1==ordenado[2] && ordenado[2]+1==ordenado[3] && ordenado[3]+1==ordenado[4] )   {
			//comprobamos si son del mismo palo
			char valor1= cartas[0].palo.charAt(0);
			char valor2= cartas[1].palo.charAt(0);
			char valor3= cartas[2].palo.charAt(0);
			char valor4= cartas[3].palo.charAt(0);
			char valor5= cartas[4].palo.charAt(0);
			if (valor1==valor2 &&  valor1==valor3 && valor4==valor1 && valor1==valor5) {
				return true;
			}
		}
		return false;
	}
	public boolean esPoker(Carta [] carta){
		//obtenemos el vector ordenado
		int vec[] = ordenarValor(carta);
		if (vec[0]==vec[1] && vec[0]==vec[2] && vec[0]==vec[3] || vec[1]==vec[2] && vec[1]==vec[3] && vec[1]==vec[4] ) {
			return true;
		}
		return false;
	}

	public boolean fullHouse(Carta[] mano){
		//obtenemos el vector ordenado
		int vec[] = ordenarValor(mano);
		if (vec[0]==vec[1] && vec[0]==vec[2] && vec[3]==vec[4] ) 
			return true;
		if (vec[0]==vec[1] && vec[2]==vec[3] && vec[3]==vec[4] ) 
			return true;
		return false;
	}
	/**
	 * 
	 * @param cartas
	 * @return retorna un vector ordenado por el valor del vector de cartas
	 */
	public int[] ordenarValor(Carta[] cartas){
		//ordenamos por palo
		int cambio=0;
		int ordenado[]=new int[5];
		for (int i = 0; i < cartas.length; i++) {
			char aux = cartas[i].valor.charAt(0);
			switch (aux) {
				case 'A':
					ordenado[i]=1;
					break;
				case 'J':
					ordenado[i]=11;
					break;
				case 'Q':
					ordenado[i]=12;
					break;
				case 'K':
					ordenado[i]=13;
					break;
				case 'T':
					ordenado[i]=10;
					break;
				default:
					ordenado[i]=Integer.parseInt(aux+"");
					break;
			}
		}
		//ahora ordenamos ese vector antes de retornarlo
		
		for (int i = 0; i < ordenado.length-1; i++) {	
			for (int j = 0; j < ordenado.length-1; j++) {
				if (ordenado[j]>ordenado[j+1]) {
					int aux = ordenado[j];
					ordenado[j]=ordenado[j+1];
					ordenado[j+1]=aux;
				}
			}
		}
		return ordenado;
	}
	public boolean escaleraReal(Carta[] cartas){
		//obtenemos el vector ordenado
		int ordenado[]=ordenarValor(cartas);
		if (ordenado[0]==1 && ordenado[1]==10 && ordenado[2]==11 && ordenado[3]==12 && ordenado[4]==13 ) {
			//si entra entonces es una escalera, comprobamos si son del mismo palo
			char valor1= cartas[0].palo.charAt(0);
			char valor2= cartas[1].palo.charAt(0);
			char valor3= cartas[2].palo.charAt(0);
			char valor4= cartas[3].palo.charAt(0);
			char valor5= cartas[4].palo.charAt(0);
			if (valor1==valor2 &&  valor1==valor3 && valor4==valor1 && valor1==valor5) {
				return true;
			}
		}
		return false;
	}

}