Técnicas para Reducir la Complejidad en la Programación del Juego [cerrado]

StackOverflow https://stackoverflow.com/questions/2145218

  •  23-09-2019
  •  | 
  •  

Pregunta

En mi tiempo libre me programa de juegos como un hobby, diferentes tipos de cosas y, actualmente, nada muy complejo.Cosas que le gustan los shooters en 2d, Azulejo-Basado en juegos, Rompecabezas Juegos, etc...

Sin embargo, como el desarrollo de estos juegos va en el encuentro se hace difícil gestionar la complejidad de los diferentes subsistemas dentro de los juegos, cosas como la Interfaz, la Visión del Mundo/Modelo, Manejo de Eventos, los Estados (del Menú, Pausa, etc...), Efectos Especiales y así sucesivamente.

Yo intento mantener las conexiones a un mínimo y reducir el acoplamiento sin embargo, muchos de estos sistemas tienen que hablar de una manera o de otra que no requieren la celebración de toda la base de código en su cabeza a la vez.

Actualmente trato de delegado de los diferentes subsistemas y subsistema de funciones a los diferentes objetos que se agregan juntos, sin embargo no he encontrado una estrategia de comunicación que está desacoplado suficiente.

¿Qué tipo de técnicas puedo utilizar para que me ayude a hacer malabares con todos estos diferentes subsistemas y manejar la complejidad de un incremento en el sistema que debe ser modular para facilitar el rápido cambian los requisitos?

A menudo me encuentro a mí mismo haciendo las mismas preguntas:

  • ¿Cómo los objetos se comunican el uno con el otro?
  • Donde si el código que se encarga de subsistemas específicos ir?
  • ¿Qué parte de mi base de código debería tener que pensar en un tiempo?
  • ¿Cómo puedo reducir el acoplamiento entre entidades de juego?
¿Fue útil?

Solución

Ah, si sólo hubo una buena respuesta a su pregunta.A continuación, el desarrollo del juego no sería tan difícil, arriesgado, y consume mucho tiempo.

Yo intento mantener las conexiones a una mínimo y reducir el acoplamiento sin embargo muchos de estos sistemas tienen que hablar en de una manera o de otra que no requieren la celebración de toda la base de código en su cabeza a la vez.

Lo hacen, pero ellos no necesitan hablar en bastante la manera más directa como la gente cree primero.Por ejemplo, es común tener el estado del juego push valores en su interfaz gráfica de usuario cada vez que algo cambia.Si, en cambio, sólo puede almacenar los valores y dejar que la interfaz gráfica de usuario de consulta de ellos (tal vez a través de un patrón observer), entonces se habrán eliminado todos los GUI referencias en el estado del juego.A menudo, basta con preguntar si un subsistema puede extraer la información que necesita de una interfaz sencilla en lugar de tener que insertar los datos en.

  • ¿Cómo los objetos se comunican el uno con el otro?
  • Donde si el código que se encarga de subsistemas específicos ir?
  • ¿Qué parte de mi base de código debería tener que pensar en un tiempo?
  • ¿Cómo puedo reducir el acoplamiento entre entidades de juego?

Nada de esto es realmente específicos para juegos, pero es un problema que surge con frecuencia con los juegos, ya que hay muchos diferentes subsistemas que todavía no se han desarrollado enfoques estándar para.Si usted toma el desarrollo web, a continuación, en realidad, hay sólo un pequeño número de paradigmas establecidos:el "uno plantilla/archivo de código por URI" de algo como PHP, o tal vez el "modelo/vista-plantilla/controlador" enfoque de RoR, Django, además de un par de los demás.Pero para los juegos, todo el mundo está rodando su propia cuenta.

Pero una cosa está clara:usted no puede resolver el problema con la pregunta "¿Cómo los objetos se comunican'.Hay muchos tipos diferentes de objetos y requieren enfoques diferentes.No intentar y encontrar una solución global para adaptarse a cada parte de tu juego - de entrada, de red, de audio, la física, la inteligencia artificial, el procesamiento, la seriación, que no va a suceder.Si intenta escribir cualquier aplicación que intenta subir con un perfecto IObject interfaz que se adapte a cada propósito, a continuación, usted va a fallar.Resolver problemas individuales primero y, a continuación, busque la comunalidad, la refactorización de la marcha.El código debe ser consultada antes de que pueda ser considerado incluso para ser reutilizable.

Juego de los subsistemas de vivir en cualquier nivel que se necesita, no más.Normalmente tengo una App de nivel superior, que es propietaria de los Gráficos, de Sonido, de Entrada, y los objetos del Juego (entre otros).El objeto de Juego posee el Mapa o el Mundo, los Jugadores, los no-jugadores, las cosas que definen los objetos, etc.

De juego diferentes estados puede ser un poco complicado, pero en realidad no son tan importantes como las personas asumen que son.La pausa puede ser codificado como un valor booleano que, cuando se establece, simplemente desactiva AI/física de las actualizaciones.Los menús pueden ser codificados como interfaz gráfica de usuario sencilla superposiciones.Por lo que su 'menú de estado", simplemente se convierte en un caso de pausar el juego y mostrando el menú, y unpausing el juego cuando el menú está cerrado - no explícito del estado de gestión.

Reducir el acoplamiento entre entidades de juego es bastante fácil, de nuevo siempre y cuando usted no tiene un amorfo idea de lo que un juego entidad que conduce a todo lo que necesitan para potencialmente hablar de todo.Los personajes de juego que suelen vivir dentro de un Mapa o de un Mundo, que es esencialmente una base de datos espaciales (entre otras cosas) y puede pedir al Mundo para decirle acerca de cerca de los personajes y objetos, sin necesidad de mantener referencias directas a ellos.

En general, aunque usted sólo tiene que utilizar un buen software de desarrollo de las reglas de su código.Lo principal es mantener las interfaces de pequeño, simple y centrado en uno, y sólo uno de sus aspectos.Acoplamiento flexible y la capacidad de concentrarse en áreas más pequeñas del código fluye naturalmente de que.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top