Si no me equivoco, básicamente estás preguntando cómo dividir un juego en el paradigma Modelo-Vista-Controlador.
En pocas palabras, el modelo es el estado de tu juego. En términos O-O, puedes pensar en el Modelo como todos los objetos en tu juego.
El Controlador es el conjunto de reglas que se aplican al estado de su juego (en este caso, todos sus objetos de juego) en cada ciclo de actualización. Esto se puede implementar como un método llamado update() en todos sus objetos, o puede ser una función llamada en su bucle de juego que sistemáticamente pasa por todos los objetos que necesitan actualización y, bueno, los actualiza. También puede pensar en el Controlador como el bucle del juego. Llama a todo para actualizar, y luego lo dibuja en la pantalla y lo repite, a menos que se cumplan algunas condiciones, luego le dice al programa que haga algo más. De esta forma, casi tienes dos estructuras MVC anidadas. Uno que controla el flujo del programa a través de menús y tal, y uno dedicado al juego en sí.
The View es simplemente la representación gráfica de su juego. Esto puede ser tan simple como el texto en una pantalla, pero en su caso son gráficos en 2D. Para implementar esto, podría hacer que cada objeto también contenga su estado gráfico, ya sea directamente o mediante encapsulación. La Vista haría poco más que consultar todos los objetos por su estado gráfico y luego desviarlo a la pantalla. Nuevamente, esto puede implementarse por objeto, como un método llamado draw(), u otra función sistemática para ser invocada directamente desde el bucle del juego. Una práctica común es crear un objeto llamado 'Sptite' o algo similar para mantener la información gráfica, y hacer que cada objeto del juego que se dibuje tenga una instancia personal. También tenga en cuenta que la vista no tiene por qué ser un objeto en sí mismo. Una mera función llamada en un bucle de juego será suficiente, aunque a veces es necesario almacenar información que afecte directamente la operación de la Vista (como el tamaño de la ventana), en cuyo caso la Vista puede ser un objeto. Lo mismo aplica para el controlador.
También tenga en cuenta que estas divisiones se pueden dividir aún más para hacer la vida más simple. Por ejemplo: el controlador se puede dividir en procesamiento AI, actualización de movimientos y verificación de colisión. La Vista se puede separar en la pantalla de objetos del juego y el HUD, y el Modelo puede ser todos los objetos + todo el estado independiente de los objetos del juego (como la configuración de juegos para resolución, tamaño de ventana, configuración de tecla y demás).
Sé que esto podría ser un poco exagerado, y probablemente tenga información adicional, pero con suerte responde su pregunta y le da ideas sobre dónde empezar.
Quizás encuentre [este artículo] (http://www.gamasutra.com/view/feature/130693/the_guerrilla_guide_to_game_code.php) útil ... si aún no lo ha leído. –
@ tereško Entonces, básicamente ScaryMonsterEnemyView tendría ScaryMonsterEnemyModel? Eso podría tener sentido, supongo. – tobes
en MVC la vista no contiene modelo. La vista solo recibe datos de la capa del modelo. Se envía desde la capa del modelo (MVC clásica) o desde la vista (MV2 de Model2). –