gnome-games r7299 - in trunk/gnome-sudoku: . src/lib



Author: thinkle
Date: Sat Feb  2 14:35:43 2008
New Revision: 7299
URL: http://svn.gnome.org/viewvc/gnome-games?rev=7299&view=rev

Log:
2008-02-02  Thomas Hinkle  <tmhinkle gmail com>

	* src/lib/defaults.py.in (PUZZLE_DIR): Add PUZZLE_DIR parameter to
	point to where default starter puzzles are stored.
	* src/lib/sudoku_maker.py (SudokuMaker.load): Use PUZZLE_DIR from
	defaults to load puzzles (fixes in-place running of gnome-sudoku).
	(SudokuMaker.get_puzzles): Add parameter 'exclude' which is a list
	of puzzles not to include in results. This allows caller to exclude
	saved games (which SudokuMaker doesn't know about)
	* src/lib/game_selector.py (NewOrSavedGameSelector.make_new_game_model):
	Exclude saved games from list of new games.


Modified:
   trunk/gnome-sudoku/ChangeLog
   trunk/gnome-sudoku/src/lib/defaults.py.in
   trunk/gnome-sudoku/src/lib/game_selector.py
   trunk/gnome-sudoku/src/lib/sudoku_maker.py

Modified: trunk/gnome-sudoku/src/lib/defaults.py.in
==============================================================================
--- trunk/gnome-sudoku/src/lib/defaults.py.in	(original)
+++ trunk/gnome-sudoku/src/lib/defaults.py.in	Sat Feb  2 14:35:43 2008
@@ -8,12 +8,14 @@
     LOCALEDIR = os.path.join(APP_DATA_DIR, 'locale')
     GLADE_DIR = os.path.join(APP_DATA_DIR,'gnome-sudoku')
     BASE_DIR = os.path.join(APP_DATA_DIR,'gnome-sudoku')
+    PUZZLE_DIR = os.path.join(APP_DATA_DIR,'gnome-sudoku','puzzles')    
 else:
     APP_DATA_DIR = os.path.join('@abs_top_builddir@', 'gnome-sudoku', 'data') 
     IMAGE_DIR = os.path.join('@abs_top_builddir@', 'gnome-sudoku', 'images')
     LOCALEDIR = os.path.join(APP_DATA_DIR, 'locale')
     GLADE_DIR = os.path.join('@abs_top_builddir@', 'gnome-sudoku', 'glade')
-    BASE_DIR = os.path.join('@abs_top_builddir@', 'gnome-sudoku', 'data') 
+    BASE_DIR = os.path.join('@abs_top_builddir@', 'gnome-sudoku', 'data')
+    PUZZLE_DIR = BASE_DIR    
 
 DOMAIN = 'gnome-games'
 gettext.bindtextdomain(DOMAIN, LOCALEDIR)

Modified: trunk/gnome-sudoku/src/lib/game_selector.py
==============================================================================
--- trunk/gnome-sudoku/src/lib/game_selector.py	(original)
+++ trunk/gnome-sudoku/src/lib/game_selector.py	Sat Feb  2 14:35:43 2008
@@ -67,6 +67,7 @@
         self.glade.get_widget('newGameLabel').set_mnemonic_widget(
             self.new_game_view
             )
+        self.saved_games = saver.SudokuTracker().list_saved_games()
         self.make_new_game_model()
         self.new_game_view.set_model(self.new_game_model)
         self.new_game_view.set_markup_column(0)
@@ -91,12 +92,17 @@
     @simple_debug
     def make_new_game_model (self):
         # Description, Pixbuf, Puzzle (str)
-        self.new_game_model = gtk.ListStore(str,gtk.gdk.Pixbuf,str)        
+        self.new_game_model = gtk.ListStore(str,gtk.gdk.Pixbuf,str)
+        saved_games_to_exclude = [
+            g['game'].split('\n')[0] for g in self.saved_games
+            ]
         for cat in DR.ordered_categories:
             rng = DR.categories[cat]; label = DR.label_by_cat[cat]
             #puzzle,diff = self.sudoku_maker.get_new_puzzle(.01*random.randint(*[r*100 for r in rng]))
             #diff_val = diff.value
-            puzzle,diff_val = self.sudoku_maker.get_puzzles(1,[cat],new=True)[0]
+            puzzle,diff_val = self.sudoku_maker.get_puzzles(1,[cat],new=True,
+                                                            exclude=saved_games_to_exclude
+                                                            )[0]
             #print 'Got new puzzle for ',cat,'difficulty:',diff
             grid = sudoku.sudoku_grid_from_string(puzzle).grid
             self.new_game_model.append(('<b><i>'+label+'</i></b>',
@@ -111,9 +117,7 @@
     def make_saved_game_model (self):
         # Description, Image, Last-Access time (for sorting), Puzzle (jar)
         self.saved_game_model = gtk.ListStore(str,gtk.gdk.Pixbuf,int,gobject.TYPE_PYOBJECT)
-        t = saver.SudokuTracker()
-        for g in t.list_saved_games():
-            #print 'game',g
+        for g in self.saved_games:
             game = g['game'].split('\n')[0]
             grid = sudoku.sudoku_grid_from_string(game)
             sr = sudoku.SudokuRater(grid.grid)

Modified: trunk/gnome-sudoku/src/lib/sudoku_maker.py
==============================================================================
--- trunk/gnome-sudoku/src/lib/sudoku_maker.py	(original)
+++ trunk/gnome-sudoku/src/lib/sudoku_maker.py	Sat Feb  2 14:35:43 2008
@@ -328,9 +328,14 @@
         for cat in sudoku.DifficultyRating.categories:
             if not os.path.exists(os.path.join(self.pickle_to,
                                                cat.replace(' ','_'))):
-                shutil.copy(os.path.join(os.path.join(BASE_DIR,'puzzles'),cat.replace(' ','_')),
-                            os.path.join(self.pickle_to,cat.replace(' ','_'))
-                            )
+                try:
+                    shutil.copy(os.path.join(os.path.join(PUZZLE_DIR),cat.replace(' ','_')),
+                                os.path.join(self.pickle_to,cat.replace(' ','_')))
+                except:
+                    print 'Problem copying base puzzles'
+                    print 'Attempted to copy from ',os.path.join(os.path.join(PUZZLE_DIR),cat.replace(' ','_'))
+                    print 'to',os.path.join(self.pickle_to,cat.replace(' ','_'))
+                    raise
 
     def get_new_puzzle (self, difficulty, new=True):
         """Return puzzle with difficulty near difficulty.
@@ -402,7 +407,8 @@
                         puzzle_list.append(puzzle)
         return puzzle_list
 
-    def get_puzzles (self, n, levels, new=True):
+    def get_puzzles (self, n, levels, new=True,
+                     exclude=[]):
         """Return a list of n puzzles and difficulty values (as floats).
 
         The puzzles will correspond as closely as possible to levels.
@@ -436,7 +442,7 @@
                     print 'WARNING: invalid line %s in file %s'%(line,files[lev])
                     continue
                 if sudoku.is_valid_puzzle(p):
-                    if not new or p not in self.played:
+                    if (p not in exclude) and (not new or p not in self.played):
                         puzzles.append((p,float(d)))
                         i += 1
                 else:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]