Estoy haciendo un juego. El juego consiste en un plano infinito. Las unidades deben estar en un cuadrado discreto, por lo que se pueden ubicar con un simple Location { x :: Int, y :: Int }
Cómo modelar un mundo 2D en Haskell
Puede haber muchos tipos de Unit
s. Algunos pueden ser criaturas, y algunos son solo objetos, como un bloque de piedra, o madera (piense 2d minecraft allí). Muchos estarán vacíos (solo hierba o lo que sea).
¿Cómo modelizarías esto en Haskell? He considerado hacer lo siguiente, pero ¿qué pasa con Object vs Creature? pueden tener diferentes campos? ¿Normalizarlos a todos en la unidad?
data Unit = Unit { x :: Int, y :: Int, type :: String, ... many shared properties... }
También he considerado tener un tipo de ubicación
data Location = Location { x :: Int, y :: Int, unit :: Unit }
-- or this
data Location = Location { x :: Int, y :: Int }
data Unit = Unit { unitFields... , location :: Location }
¿Tiene alguna idea? En un lenguaje OO, probablemente habría heredado Location
o Unit
del otro y he hecho que los tipos específicos de Unidad hereden el uno del otro.
Otra consideración es que enviará muchos de estos objetos a través del cable, por lo que tendré que serializarlos en JSON para usarlos en el cliente, y no quiero escribir toneladas de texto repetitivo.
Usa un 'Data.Map.Map' como tu grilla. –
Entonces, ¿la x an y no es más que una clave en el Mapa, y las Unidades simplemente tienen sus diversos campos? ¿Qué pasa cuando llega el momento de enviarlos al cliente, debería enviar un mapa/hash allí también? –