On Thu, Jan 10, 2013 at 9:56 PM, Walter Bender <walter.ben...@gmail.com>wrote:
> On Thu, Jan 10, 2013 at 11:02 AM, Ajay Garg <a...@activitycentral.com> > wrote: > > > > > > On Thu, Jan 10, 2013 at 8:49 PM, Gonzalo Odiard <gonz...@laptop.org> > wrote: > >> > >> Thanks Ajay and Ariel. > >> I filled sl #4373 to follow this issue. > >> > >> Comments: > >> * Now you save the game data and the game session data every time. There > >> are small games, like aritmetic or letters, but can be big if have > images or > >> sounds attached. Should be good save the data only if is a custom game. > > > > > > Or may be ask the user (while exiting), that whether the user wishes to > > save the game? > > Not a very Sugary approach. > :D > > > > > > >> * I think is better use json to persist a structure like a list instead > of > >> str/eval. > > > > > > Hmm.. the current approach kind of copies the game-image, thus making it > > immune to any change in the game-state-image. > > Also, having it persisted in any other form will just make the code too > > bloatful and error-prone. > > Not sure how json makes things either more bloated or more error-prone. > Hmmm.. I was just a bit sceptical, since we seem to be doing the "byte_arrays=True" and "byte_arrays=False" at different places. Having it as a string, will eliminate all such issues :) > > regards. > > -walter > > > > > > >> > >> > >> I haven't tested this yet. > >> > >> Gonzalo > >> > >> > >> On Thu, Jan 10, 2013 at 11:44 AM, Ariel Calzada < > ariel.calz...@gmail.com> > >> wrote: > >>> > >>> From: Ajay Garg <a...@activitycentral.com> > >>> > >>> The approach followed has been simply to save the current-game image > >>> when closing the game. The game resumes from that image next time > >>> onwards. > >>> > >>> Tests conducted :: > >>> > >>> a) > >>> > >>> (i) > >>> User exits, without finishing the current game. > >>> > >>> (ii) > >>> When she next starts, she will proceed from the same game, from the > >>> same stage. > >>> > >>> b) > >>> > >>> (i) > >>> User exits, without finishing the current game. > >>> > >>> (ii) > >>> She then transfers the journal-entry to another XO. > >>> > >>> (iii) > >>> Tries to resume the game, from the (transferred) journal entry. > >>> > >>> (iv) > >>> Game resumes, from the same stage. > >>> > >>> > >>> Signed-off-by: Ajay Garg <a...@activitycentral.com> > >>> --- > >>> activity.py | 16 ++++++++++++++-- > >>> cardlist.py | 3 ++- > >>> game.py | 14 ++++++++++++-- > >>> memorizetoolbar.py | 2 +- > >>> model.py | 12 +++++++++++- > >>> 5 files changed, 40 insertions(+), 7 deletions(-) > >>> > >>> diff --git a/activity.py b/activity.py > >>> index 8bfd758..8bc679d 100644 > >>> --- a/activity.py > >>> +++ b/activity.py > >>> @@ -107,7 +107,7 @@ class MemorizeActivity(Activity): > >>> # Play game mode > >>> self.table = cardtable.CardTable() > >>> self.scoreboard = scoreboard.Scoreboard() > >>> - self.cardlist = cardlist.CardList() > >>> + self.cardlist = cardlist.CardList(self) > >>> self.createcardpanel = createcardpanel.CreateCardPanel() > >>> self.cardlist.connect('pair-selected', > >>> self.createcardpanel.pair_selected) > >>> @@ -127,7 +127,7 @@ class MemorizeActivity(Activity): > >>> self._memorizeToolbarBuilder.reset) > >>> self._createToolbarBuilder.connect('create_equal_pairs', > >>> self.change_equal_pairs) > >>> - self.game = game.MemorizeGame() > >>> + self.game = game.MemorizeGame(self) > >>> > >>> self._edit_button.connect('toggled', self._change_mode_bt) > >>> > >>> @@ -232,11 +232,16 @@ class MemorizeActivity(Activity): > >>> > >>> def write_file(self, file_path): > >>> logging.debug('WRITE_FILE is_demo %s', > self.game.model.is_demo) > >>> + > >>> + # We want to save the game-image for demo games too !!! > >>> + """ > >>> if self.game.model.is_demo: > >>> # if is a demo game only want keep the metadata > >>> self._jobject.set_file_path(None) > >>> raise NotImplementedError > >>> return > >>> + """ > >>> + > >>> if self.cardlist.pair_list_modified: > >>> self.cardlist.update_model(self.game.model) > >>> > >>> @@ -285,6 +290,13 @@ class MemorizeActivity(Activity): > >>> game_zip.close() > >>> self.metadata['mime_type'] = 'application/x-memorize-project' > >>> > >>> + # Store the game image as a string - that is simpler instead > of > >>> + # having to deal with the dbus-converted list. > >>> + # When reading back, we use "eval" to convert the string into > >>> + # the correct type ("list" in this case). > >>> + self.metadata['saved_game_data_image'] = > >>> str(self.game.model.grid) > >>> + self.metadata['size'] = int(self.game.model.data['size']) > >>> + > >>> def _complete_close(self): > >>> self._remove_temp_files() > >>> Activity._complete_close(self) > >>> diff --git a/cardlist.py b/cardlist.py > >>> index 6bc781c..65e44f1 100644 > >>> --- a/cardlist.py > >>> +++ b/cardlist.py > >>> @@ -40,8 +40,9 @@ class CardList(gtk.EventBox): > >>> 'update-create-toolbar': (SIGNAL_RUN_FIRST, None, 3 * > >>> [TYPE_PYOBJECT]), > >>> } > >>> > >>> - def __init__(self): > >>> + def __init__(self, activity_instance): > >>> gtk.EventBox.__init__(self) > >>> + self._activity_instance = activity_instance > >>> self.pairs = [] > >>> self.current_pair = None > >>> self.current_game_key = None > >>> diff --git a/game.py b/game.py > >>> index c5e54d1..9d21b4b 100644 > >>> --- a/game.py > >>> +++ b/game.py > >>> @@ -57,7 +57,7 @@ class MemorizeGame(GObject): > >>> 'change-turn': (SIGNAL_RUN_FIRST, None, [TYPE_PYOBJECT]), > >>> } > >>> > >>> - def __init__(self): > >>> + def __init__(self, activity_instance): > >>> gobject.GObject.__init__(self) > >>> self.myself = None > >>> self.players_score = {} > >>> @@ -70,7 +70,7 @@ class MemorizeGame(GObject): > >>> self.messenger = None > >>> self.sentitive = True > >>> > >>> - self.model = Model() > >>> + self.model = Model(activity_instance=activity_instance) > >>> self.flip_block = False > >>> self._flop_cards = None > >>> > >>> @@ -109,6 +109,16 @@ class MemorizeGame(GObject): > >>> self.change_turn() > >>> self.model.data['running'] = 'False' > >>> > >>> + # Card 'state' is an aawesome field. > >>> + # Its takes on the following values :: > >>> + # > >>> + # 0 ==> for flopped cards. > >>> + # > >>> + # 1 ==> for flipped unmatched > >>> cards > >>> + # (can be a maximum of 1 > >>> such card). > >>> + # > >>> + # <stroke_color>, <fill_color> ==> for flipped matched > >>> cards > >>> + > >>> for card in self.model.grid: > >>> if card['state'] == '1': > >>> self.emit('flip-card', self.model.grid.index(card), > >>> False) > >>> diff --git a/memorizetoolbar.py b/memorizetoolbar.py > >>> index 1a06da7..07ceecf 100644 > >>> --- a/memorizetoolbar.py > >>> +++ b/memorizetoolbar.py > >>> @@ -135,5 +135,5 @@ class MemorizeToolbarBuilder(gobject.GObject): > >>> self._demo_games.props.icon_name = 'memorize-collection' > >>> > >>> def update_toolbar(self, widget, data, grid): > >>> - size = data.get('size') > >>> + size = str(data.get('size')) > >>> self._size_combo.props.icon_name = size + ' X ' + size > >>> diff --git a/model.py b/model.py > >>> index 2567ed2..16239c4 100644 > >>> --- a/model.py > >>> +++ b/model.py > >>> @@ -100,11 +100,13 @@ class Model(object): > >>> information. > >>> ''' > >>> > >>> - def __init__(self, game_path=None): > >>> + def __init__(self, game_path=None, activity_instance=None): > >>> tmp_root = join(environ['SUGAR_ACTIVITY_ROOT'], 'instance') > >>> self.temp_folder = tempfile.mkdtemp(dir=tmp_root) > >>> chmod(self.temp_folder, 0777) > >>> + self._saved_game_loaded = False > >>> > >>> + self._activity_instance = activity_instance > >>> self.data = {} > >>> > >>> if game_path is None: > >>> @@ -366,6 +368,14 @@ class Model(object): > >>> temp1.extend(temp2) > >>> random.shuffle(temp1) > >>> self.grid = temp1 > >>> + > >>> + if not self._saved_game_loaded: > >>> + if self._activity_instance is not None: > >>> + if 'saved_game_data_image' in > >>> self._activity_instance.metadata.keys(): > >>> + self.grid = > >>> eval(self._activity_instance.metadata['saved_game_data_image']) > >>> + self.data['size'] = > >>> int(self._activity_instance.metadata['size']) > >>> + self._saved_game_loaded = True > >>> + > >>> _logger.debug('Defgrid: grid( size=%s ): %s' > >>> % (self.data['size'], self.grid)) > >>> _logger.debug('Defgrid: data: %s', self.data) > >>> -- > >>> 1.7.11.7 > >>> > >>> _______________________________________________ > >>> Sugar-devel mailing list > >>> Sugar-devel@lists.sugarlabs.org > >>> http://lists.sugarlabs.org/listinfo/sugar-devel > >> > >> > > > > > > > > -- > > Regards, > > > > Ajay Garg > > Dextrose Developer > > Activity Central: http://activitycentral.com > > _______________________________________________ > > Sugar-devel mailing list > > Sugar-devel@lists.sugarlabs.org > > http://lists.sugarlabs.org/listinfo/sugar-devel > > > > > > -- > Walter Bender > Sugar Labs > http://www.sugarlabs.org > _______________________________________________ > Sugar-devel mailing list > Sugar-devel@lists.sugarlabs.org > http://lists.sugarlabs.org/listinfo/sugar-devel > -- Regards, Ajay Garg Dextrose Developer Activity Central: http://activitycentral.com
_______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel