He creado un juego de Scrabble basado en consola simple usando Python. Traté de encapsular el modelo de juego de la E/S tanto como sea posible, lo que significa que creé algunas clases para describir el juego con sus reglas y el estado actual. Básicamente me ocurrió con estas clases:Modelo de juego autónomo Connect con interfaz de usuario basada en Qt
LetterSet
: Describir las fichas en el juego (puntuación, cantidad total, etc.)- : Una representación de la Junta con sus azulejos y funciones auxiliry
Player
: una clase virtual para subclase clases reales como ser humano o Bot, tiene un métodoplay()
que debe devolver a los jugadores moverseGame
: Bueno ...
Board
Todo funciona bien con un simple flujo lineal y síncrono con mi aplicación de consola.
Pero resulta que no es tan fácil trasladar este concepto a Qt. He creado todos los widgets necesarios, como un tablero dragable, elementos visuales generales que describen el estado del juego y botones simples como 'Pase', 'Continuar', 'Intercambio'.
El problema es que no estoy seguro de cómo manejar el método play()
que puede usar la interfaz Qt que creé para generar un movimiento válido. Eso no es problema para el Bot
, que simplemente busca un movimiento sin ninguna interacción.
Mi idea actual es crear un bucle de eventos locales como se describe here y esperar a que los botones para se hace clic en mi método definido en play()
Human(Bot)
. Esto es algo feo, así que me pregunto si hay una mejor manera de hacerlo.
Me gustaría que la lógica principal sea la misma, p. la clase Player
sirve un método play()
que genera un movimiento y lo devuelve. De esta forma, debería ser posible crear cualquier tipo de Player
, como reproductores de red o bots. Esta forma síncrona de hacerlo no funciona muy bien con la forma de hacer señas basada en la señal/ranura de Qt. Espero que alguien haya tenido una buena idea para resolver mi problema.
resumirse así:cómo generar movimiento del Player
's dentro de su método play()
y devolverla como un simple move = player.play(game)
llamada?
Editar: Una instantánea para tener una idea de lo que estoy hablando: snapshot http://reaktor42.de/~b52/shots/2011-06-26-235749_972x729_scrot.png
Edit2: Esto es bastante antiguo y yo completado la tarea hace unos dos años con éxito. Sin embargo, pensé que podría ser útil para otros si publico el results through github.
Gracias de antemano, Oli
Pero cómo mantener todo esto en el método 'play()' y devolver el movimiento solo después de que el jugador realmente haya hecho algo. No veo cómo puedo hacer esto usando señales y ranuras. –