Henning Thielemann wrote:
A dungeon game? :-)
Yes. :-)
Thank you all for your answers! I especially like David's
no-intermediate-structure solution because it allows for defining the
area in terms of neighbours instead of needing an index on the rooms.
Now that I have core functionality in my game I want to try and build
some interesting areas, such as infinite ones: a infinite grid, or an
N-dimensional Hilbert curve. Because rooms are mutable, I am building
them inside a state monad and use ids:
mkRoom :: M RoomId
addExit :: RoomId -> Exit -> M ()
type Exit = (String, RoomId)
I thought my original question would give me some ideas on how to
construct infinite areas, but this monadic interface complicates things
somewhat. If I create all rooms at once, runState never returns, so I
will have to create them lazily, perhaps by changing:
type Exit = M (String, RoomId)
But I think in addition to that I will also needs refs, so that the
monadic computation can check using a ref whether it's created its
target room before.
I will have to experiment and think on this some more.
Martijn.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe