Tengo una estrategia basada en mosaicos 2D en las obras. Me pregunto cómo manejar la relación entre el mapa y las unidades en el mapa.
Dada una coordenada de mosaico, tendré que ser capaz de poner la unidad sobre ella, si la hay. Al mismo tiempo, si me dan una unidad, querré poder obtener la coordenada de la unidad.
He visto dos soluciones para esto. La primera solución sería que las unidades almacenen una coordenada y el mapa almacene referencias de unidades en sus mosaicos. Esto crea una dependencia cíclica entre el mapa y las unidades. Necesitaría asegurarme de que el mapa y cualquier unidad se mantengan sincronizados si la unidad se mueve.
La segunda solución sería hacer que las unidades solo rastreen sus coordenadas. Para saber si un mosaico contiene una unidad y para obtener esa unidad, recorro todo el conjunto de unidades de unidad y encuentro una con coordenadas coincidentes. Eso elimina la dependencia cíclica, pero pierde la propiedad O (1) que tenía la primera solución para buscar unidades del mapa. Esto puede sumar, ya que quiero poder escanear el mapa regularmente en busca de cosas como encontrar el camino, determinar el rango de movimiento y encontrar objetivos válidos para una unidad determinada.
Tampoco puedo almacenar las unidades en el mapa (¿o sí?). Las unidades están asociadas con "ejércitos", ya sea jugador o IA. Un ejército debería poder acceder fácilmente e iterar sobre todas sus unidades.
Dado que esto parece ser un problema común en los juegos de estrategia, ¿existen otros patrones además de los dos que describí para administrar las relaciones unidad / mapa?
Bueno, a menos que tengas varios miles de unidades por jugador, no me preocuparía por el uso de memoria y usaría la primera solución. Parece que la memoria es más barata que la CPU.
De hecho, incluso si tuvieras 4000 unidades por jugador, usando dos enteros para almacenar su ubicación y 8 jugadores, eso solo toma 2 MB, pero con la primera solución, puedes usar un captador coordinado O (1), en lugar de O (n) (suponiendo no clasificado), que con muchas unidades podría ser lento.
La mayoría de los juegos parecen estar basados en píxeles, en lugar de mosaicos, hoy en día, por lo que solo necesitan que la unidad almacene los códigos.
fuente