On Aug 30, 7:14 am, CuppoJava <[email protected]> wrote:
> Hi Elliot,
> I've written a small game using Clojure and LWJGL, and I've run into
> the exact same issue (balancing between mutability and immutability)
> when I was working on it. The three approaches I tried were:
First of all, thanks for your input; I'm still trying to figure out
what model is best for my game. Comments inline.
> The world is 1 ref containing the state of the game. Everything else
> is immutable.
I've thought about this (via zippers), but it seems to me that it
wouldn't be very good for either parallelism or message passing.
> Sprites are maps of refs of their properties. So practically
> everything is mutable.
Keeping a ref for each attribute seems excessive to me.
> And finally, sprites are refs of their states. Their states themselves
> are immutable.
This seems sensible to me.
I'm wondering if it might make sense to use agents to get an implicit
sort of message passing behavior between objects.
> I found the last option to be both the fastest and also the most
> straight-forward to program. The rule of thumb I used was: "Do I care
> about the identity of this object? or do I care only about the value?"
> If Identity is important, (ie. you need to know WHICH sprite this is)
> then I used a ref. If I cared only about the value (ie. what's the
> sprites state? I could care less about WHICH state object it is.) then
> it should be an immutable structure.
>
> Caveat: The only issue I've run into with this scheme is when the
> states of a sprite depend upon the identity of another sprite. (eg.
> This sprite needs to know WHICH weapon he's wielding.) So in this
> case, the state will contain a reference to a ref, which is something
> that's been written as not a very good thing to do.
So if I made a tree holding actors where actors are agents wrapping
maps, then I can imagine that I might want to give an agent a
reference to another agent (to allow them to pass messages back and
forth).
(def root (agent
{:name :root
:children [(agent
{:name :child})]}))
Are you saying that this is not a suggested way of doing things?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---