Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Lauta en 17 Septiembre 2011, 18:12 pm



Título: Dudas con un juego de truco
Publicado por: Lauta en 17 Septiembre 2011, 18:12 pm
Buenas! Hace unos días me entregaron el TP que tengo que realizar en IBM Mainframe 370 y es un juego de truco (http://es.wikipedia.org/wiki/Truco_argentino).

Como con el maldito Assembler de IBM no ando muy afilado, decidí programarlo primero en Java (muuuucho más fácil) y luego pasarlo a lo otro.

Una de las primeras dudas que me surgió es como programar el cálculo del envido, tengo la idea pero no sé muy bien como plasmarla (sólo se me ocurre con 4000 IFs encadenados :D). La idea del algoritmo sería así:

Código:
si tengo 3 cartas del mismo palo: obtener las dos más grandes, sumarlas y sumarle 20
si tengo 2 cartas del mismo palo: sumarlas y sumarle 20
si tengo 3 cartas de distinto palo: obtener la más grande.

para las comparaciones de qué carta es más grande y para la suma, tengo que tener en cuenta que los 10,11,12 valen 0 para el envido

Lo que definí son las estructuras más o menos:

Clase Jugador:
Cartas cartas[3];
...

Clase Carta:
int palo;
int numero;
...

Aprecio cualquier ayuda!

PD: no lo puse en programación JAVA, porque no es un ejercicio de JAVA, es algo que tengo que hacer en Assembler, pero lo quiero programar en algo de alto nivel primero.

Saludos!


Título: Re: Dudas con un juego de truco
Publicado por: Lauta en 17 Septiembre 2011, 19:27 pm
Para que se entienda un poco mejor, lo que yo haría, porque no se me ocurre algo mejor es:

Código:
//Si son las tres iguales, agarro las dos más altas y le sumo 20
if(cartas[0].getPalo() == cartas[1].getPalo() && cartas[0].getPalo() == cartas[2].getPalo()){
envido = 20 + max(cartas, 2);

//Si solo hay dos iguales, las sumo y le sumo 20
}else if(cartas[0].getPalo() == cartas[1].getPalo()){
envido = 20 + cartas[0] + cartas[1];
}else if(cartas[0].getPalo() == cartas[2].getPalo()){
envido = 20 + cartas[0] + cartas[2];
}else if(cartas[1].getPalo() == cartas[2].getPalo()){
envido = 20 + cartas[1] + cartas[2];

//Si son todas de palo distinto, agarro la más grande
}else {
envido = max(cartas, 1);
}

Max me devolvería, del array de cartas que le paso, el más grande si el segundo parámetro es 1 y los dos más grandes si es 2.
A esto debería agregarle las comparaciones para que si la carta es un 10, 11 o 12 no sume nada

Quiero ver si alguien sabe alguna manera mejor de hacerlo ya que no me gusta mucho el código, se vuelve medio enmarañado ("como el cabello de Willy?" :P)

Saludos!