¿Creo una clase de país que contiene un montón de ciudades?
Seguro.
¿Las ciudades contienen mucha clase de construcción, la mayoría contienen clases de personas?
Seguro.
¿Hago una clase de búsqueda de ruta a la que el jugador pueda acceder para moverse?
Seguro.
Todo lo que has sugerido anteriormente parece razonable. Puede que no sea la mejor manera para ti a largo plazo, pero está bien. Obviamente tiene sentido que lo sepas, ya que es el modelo organizativo que se te ocurrió por primera vez. Es importante que tome eso y comience una implementación a partir de él. Ambos lo ayudarán a comenzar, superando esta "parálisis de diseño" inicial que a menudo afecta a los desarrolladores al comienzo de una tarea, y (si se demuestra que tiene algún defecto) le enseñará una o dos cosas sobre los pros y los contras. de ese enfoque particular al diseño.
Naturalmente, ha tomado los conceptos en su cabeza y los ha agrupado en código de acuerdo con algunas reglas simples:
- ¿Este concepto difiere significativamente en el comportamiento o en los datos de otros objetos que ya tengo? (Los países y las personas comparten muy poco, o ninguno, datos o comportamientos significativos, por lo que deberían estar representados por distintos tipos en el juego).
- ¿Necesitaré incluso manipular este concepto en el código de manera significativa (si su juego trata con personas individuales, es posible que necesite esa
Person
clase, pero si el juego solo se preocupa por ellos en conjunto, como en versiones anteriores de SimCity, usted puede que no necesite ese tipo ni instancias de ese tipo para crear un mapeo 1: 1 de la población de una ciudad. int populationCount
Puede ser suficiente).
- ¿Este concepto requiere estado ? Si es así, debería encapsularse de alguna manera que me permita almacenar este estado (una clase) en lugar de un montón de funciones gratuitas. (Una implementación de búsqueda de ruta no tiene un objeto análogo del mundo real, pero requiere hacer un seguimiento de los datos, como qué nodos en el mapa ya ha considerado, y eso se hace mejor a través de una clase que almacenándolo en un grupo de globales ocultos y haciendo funciones independientes).
Si bien es simple, responder esas preguntas puede ser de gran beneficio al intentar decidir si y cómo transformar un concepto mental en código fuente. También es posible que desee leer sobre el principios SÓLIDOS del diseño orientado a objetos .
Tenga en cuenta que la sugerencia de un sistema de entidad / componente hecha en los comentarios también es un enfoque válido, aunque lo evitaría aquí a menos que vuelva a definir su proyecto para que sea más pequeño (simplemente porque asumir dos desafíos nuevos y grandes en un proyecto puede ser demasiado desalentador y puede diluir el beneficio educativo que de otro modo recibiría al enfocarse solo en uno). En un modelo orientado a componentes, el "tipo" en las preguntas anteriores se vuelve más implícito: no el tipo concreto en el código, sino el tipo implícito definido por la colección de componentes que forman una entidad. Se pueden aplicar los mismos principios rectores.