Multiple undo and redo
J. Landman Gay
jacque at hyperactivesw.com
Mon Feb 19 13:49:00 EST 2007
Malte Brill wrote:
> > Malte, what did you do for drops, where you have 5 undos?
>
> I did something I would not do again. :-)
> I am cloning the playgrid and copy it to an undo card. If there are more
> than 5 groups on that card I delete the one with the lowest layer. when
> undoing I copy the one with the highest layer back to the main card and
> delete it on the undo card. However, a much nicer approach will be to
> store states in a custom property set and go from there.
>
> like undo[1],undo[2],...undo[n|
>
> and store all relevant data there.
My Klondike game has unlimited undo/redo and that's what I did. I stored
the state of the game in a list, pushing each state onto the top of the
list after every play. When the user chooses to undo, I pop the top line
off the list, use it to implement the desired state of the game, and
then push it onto a second list that is used identically to implement
"redo". The user is able to undo game plays all the way back to the
beginning of the game, and then redo the plays again all the way to the
final move that was made.
This was pretty easy in a game where you have a limited state change;
for Klondike I only needed to store the locations of 52 cards after each
move. But for a product like Rev, where the current state could be
almost anything, it would be much harder. We'd need an engine change, I
think, and I like Richard's idea of having a property we could read that
would return the current state of, say, a whole stack, for instance.
--
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
More information about the use-livecode
mailing list