#3 Re: JUego de truco en Vb.
Me parece que si lo quiere hacer en Visual Basic, ver el codigo java mucho no le va a servir ya que no VB no es orientado a objetos (al menos la version 6) pero algunas ideas le puede sacar, pienso yo...
En si si lo pensamos el juego no es tan tan tan dificil de implementar... Nos ponemos a pensar en las siguientes clases y como interactuan:
Clase carta:; contiene atributos como es el palo y el valor...
Clase Mazo: es una encapsulacion de una lista de cartas, con metodos para mezclar, y cortar...
Clase Mano: es una encapsulacion de una lista de 3 cartas, tiene metodos para evaluar la mano, como por ejemplo algun algoritmo implementado para calcular si es flor, cuanto tiene de envido...
Clase ManoComparator: Esto es una interfaz que toma a dos manos como parametro y devuelve cual de las dos manos es mejor...
Clase EnvidoManoComparator: Esto es una implementacion de la clase ManoComparator que compara a ambas manos por envido y devuelve cual es mejor basado en el envido...
CardComparator: es una clase que toma a dos cartas como parametro y tiene implementado la escala de valores de truco de cartas, devuelve la carta mas grande de las dos...
TurnoListener; clase que tiene metodos callback como turnoIniciado, turnoEnCurso, turnoTerminado, y reciben informacion del turno...
TurnoObservable: clase abstracta que puede regsitrar listeners TurnoListener y notificara a estos cada vez que se va a iniciar un turno... les invocca a cada uno el metodo turnoIniciado, turnoEnCurso, turnoTerminado pasandose a si mismo como referencia a los metodos... (Esto sirve para que la ÜI sea notificada cada vez que un jugador inicio, esta en curso y termino un turno...
Clase Player: Clase que encapsula a un jugador, es una clase abstracta... tiene como datos una instancia de la Clase Mano... implementa la interfaz TurnoObservable y tiene el metodo jugarTurno, donde adentro notifica a los observadores invocandole a los metodos turnoIniciado, turnoEnCurso, turnoTerminado, e invoca a un metodo virtual llamado ejecutarTurno que cada subclase sobreescribirà para realizar acciones concretas...
Clase HumanPlayer: Clase derivada de Player que representa a un jugador humano... No realiza ninguna acciòn en el metodo jugarTurno...
Clase EstrategiaEnvido: Clase abstracta con metodos para evaluar el el envido desde el punto de vista de la PC, tendra metodos como evaluar, cantar envido. cantar real envido, cantar falta envido...
Clase EstrategiaEnvidoNovato: Clase que hereda de EstrategiaEnvido e implementa los metodos emulando a un jugador novato...
Clase EstrategiaEnvidoMentiroso;: Clase que hereda de EstrategiaEnvido e implementa los metodos emulando a un jugador mentiroso...
Clase EstrategiaTruco: Clase abstractas con metodos para evaluar el truco desde el punto de vista de la PC, tendrà metodos como evaluar, cantar truco, cantar quiero re truco, cantar quiero vale cuatro...
Clase EstrategiaTrucoNovato:; Clase que hereda de EstrategiaTruco emulando a un jugador novato...
Clase EstrategiaTrucoMentiroso; Clase que hereda de EstrategiaTruco emulando a un jugador mentiroso...
Clase ComputerPlayer: Clase que hereda de Player, tiene como referencia interna a una instancia de EstrategiaEnvido y delega a esta instancia, todo lo relacionado con el Envido, ademas tiene una instancia de EstrategiaTruco y delega a esta instancia (en ealidad una de ambas clases derivadas) todo lo relacionado con el truco...
Sobreescribirà el metodo ejecutarTurno para pedir a la estrategia del envido que evalue (en realidad si cambiamos la estrategia que tiene como referencia esta clase, se comportara de forma diferente), y se le pide a la estrategia de truco que evalue para luego realizar la jugada...
Clase EstadoJuego: Basicamente define un estado del juego, envido cantado, envido envido, envido real envido, real envido, falta envido, truco, quiero re truco, quiero vale cuatro, son algunos estados del juego, estos saben como ir avanzando a sus proximos estados...
Clase TurnoManager;: Tiene una lista de jugadores (2 jugadores) y va evaluando el turno de cada jugador y luego le invoca a su metodo jugarTurno....
Clase Juego: Contiene una lista de jugadores, ademàs contiene a una instancia de TurnoManager para ir ciclando por los turnos... Ademàs tiene un mazo de cartas... Ademas tiene una referencia al estado actual del juego...
Lo que le veo de bueno de los listeners es que yo puedo tener clases en la UI que sean listeners de los turnos de los jugadores, y que actuen ante ciertos eventos, por ejemplo puedo tener una clase que sea notificada del turno del jugador humano, y ante el evento turnoIniciado, yo puedo desde esa clase habilitar controles en la UI, botones, y demàs.... a su vez en el evento turnoFinalizado puedo deshabilitar controles en la UI...
Bueno esto es un breve analisis y diseño de un juego de truco con las clases mas relevantes...
Saludos
Pablo