SteveBarnegren / SwiftChess

Chess engine and AI written in Swift
MIT License
145 stars 35 forks source link

How can I implement undo function? #3

Closed superdev0727 closed 6 years ago

superdev0727 commented 6 years ago

I'd like to add undo function to my app. What should I save and reload for this function? Thank you.

SteveBarnegren commented 6 years ago

Hi!

It would be a little tricky to do this with the way that the engine is currently implemented, unless you want to make your own changes to it, or course.

You are in luck though, I put together a persistence feature last weekend that you could probably use. I need to spend a bit more time testing before I release it, but it is currently working. You can check it out on the feature/persistence branch

It works by converting a SwiftChess.Game to a dictionary. You should be able to do something like this before making a move:

let beforeMoveDictionary = game.dictionaryRepresentation

And to undo the last move, just replace your game with the previously saved dictionary. You would then need to update your views as the board will have changed:

self.game = SwiftChess.Game(dictionary: beforeMoveDictionary)

I need to run some more tests and fix some minor edge cases with it, but I hope that I should be able to integrate it in to the main project sometime next week.

SteveBarnegren commented 6 years ago

Persistence is now included in v1.0. This should be all you need to create an undo feature, let me know if you have any issues with it!