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

Reply via email to