Reset grid functionality implemented
authorHarishankar <v.harishankar@gmail.com>
Mon, 6 Dec 2010 05:35:15 +0000 (11:05 +0530)
committerHarishankar <v.harishankar@gmail.com>
Mon, 6 Dec 2010 05:35:15 +0000 (11:05 +0530)
Implemented resetting the grid. This wipes out all grid data from
the grid, including words, clues etc.

crosswordpuzzle.py
crosswordpuzzlecreator.py

index 7d3b270..57878b8 100644 (file)
@@ -9,11 +9,14 @@ import cairo
 
 class GridItem:
        # initialize the item
-       def __init__ (self, item_char='.', across_start = False, down_start = False,
-                                       occupied_across = False, occupied_down = False, num = 0,
-                                       clue_across = None, clue_down = None, revealed = False):
+       def __init__ (self, item_char='.', item_guess = None, across_start = False,
+                                       down_start = False,     occupied_across = False,
+                                       occupied_down = False, num = 0, clue_across = None,
+                                       clue_down = None, revealed = False):
                # character in the cell
                self.char = item_char
+               # guess of character in cell
+               self.guess = item_guess
                # is the cell the start of an across word?
                self.across_start = across_start
                # is the cell the start of a down word?
@@ -31,6 +34,59 @@ class GridItem:
                # is the letter revealed or hidden?
                self.revealed = revealed
 
+       # clear the across data
+       def clear_across_data (self):
+               self.across_start = False
+               self.occupied_across = False
+               self.clue_across = None
+               # if no down word starting at item
+               if self.down_start is False:
+                       self.numbered = 0
+               # if no down word at the item
+               if self.occupied_down is False:
+                       self.char = '.'
+                       self.revealed = False
+                       self.guess = None
+
+       # clear the down data
+       def clear_down_data (self):
+               self.down_start = False
+               self.occupied_down = False
+               self.clue_down = None
+               # if no across word starting at item
+               if self.across_start is False:
+                       self.numbered = 0
+               # if no across word at the item
+               if self.occupied_across is False:
+                       self.char = '.'
+                       self.revealed = False
+                       self.guess = None
+
+       # reset a grid item completely - use only to destroy whole grid, otherwise
+       # use either clear_across_data () or clear_down_data () for erasing single
+       # words
+       def reset (self):
+               # character in the cell
+               self.char = '.'
+               # guess of character in cell
+               self.guess = None
+               # is the cell the start of an across word?
+               self.across_start = False
+               # is the cell the start of a down word?
+               self.down_start = False
+               # is the cell occupied by a letter in an across word?
+               self.occupied_across = False
+               # is the cell occupied by a letter in a down word?
+               self.occupied_down = False
+               # numbering of the cell if it is the start of a word
+               self.numbered = 0
+               # clue across if the cell is the start of an across word
+               self.clue_across = None
+               # clue down if the cell is the start of a down word
+               self.clue_down = None
+               # is the letter revealed or hidden?
+               self.revealed = False
+
 # exception for too long words
 class TooLongWordException (Exception):
        def __init__ (self, word, length):
@@ -444,3 +500,12 @@ class CrosswordPuzzle:
 
                self.frozen_grid = False
 
+       # reset the entire grid
+       def reset_grid (self):
+               # run through the grid
+               for row in range (self.rows):
+                       for col in range (self.cols):
+                               # re-initialize all data
+                               self.data[row][col].reset ()
+
+               self.frozen_grid = False
index 5a0ae11..1e62315 100644 (file)
@@ -146,9 +146,8 @@ class CrosswordPuzzleCreator:
                        aword, arow, acol, alen = self.puzzle.get_word_across (row, col)
                        sys.stdout.write (self.BLUE + "Across word at position: " + aword + "\n" + self.ENDCOL)
                        clue = raw_input (self.BRICKRED + "Clue for across word: " + self.ENDCOL)
-                       if clue:
-                               self.puzzle.data[arow][acol].clue_across = clue
-                               sys.stdout.write (self.BLUE + "Set clue: \n" + self.puzzle.data[arow][acol].clue_across)
+                       self.puzzle.data[arow][acol].clue_across = clue
+                       sys.stdout.write (self.BLUE + "Set the clue: \n" + self.puzzle.data[arow][acol].clue_across)
                except crosswordpuzzle.NoWordException:
                        sys.stderr.write ("No across word found at that position\n")
 
@@ -157,9 +156,8 @@ class CrosswordPuzzleCreator:
                        dword, drow, dcol, dlen = self.puzzle.get_word_down (row, col)
                        sys.stdout.write (self.BLUE + "Down word at position: " + dword + "\n" + self.ENDCOL)
                        clue = raw_input (self.BRICKRED + "Clue for down word: " + self.ENDCOL)
-                       if clue:
-                               self.puzzle.data[drow][dcol].clue_down = clue
-                               sys.stdout.write (self.BLUE + "Set clue: \n" + self.puzzle.data[drow][dcol].clue_down)
+                       self.puzzle.data[drow][dcol].clue_down = clue
+                       sys.stdout.write (self.BLUE + "Set the clue: \n" + self.puzzle.data[drow][dcol].clue_down)
                except crosswordpuzzle.NoWordException:
                        sys.stderr.write ("No down word found at that position\n")
 
@@ -251,6 +249,7 @@ class CrosswordPuzzleCreator:
                                sys.stdout.write ("7. Unfreeze grid\n")
                                sys.stdout.write ("8. Set clue for word\n")
                                sys.stdout.write ("9. Display clues\n")
+                               sys.stdout.write ("R. Reset grid\n")
                                sys.stdout.write ("S. Save puzzle\n")
                                sys.stdout.write ("E. Export to AcrossLite(TM) format\n")
                                sys.stdout.write ("H. Export puzzle as image/HTML\n")
@@ -271,6 +270,8 @@ class CrosswordPuzzleCreator:
                                        self.on_set_clue ()
                                elif ch == "9":
                                        self.on_display_clues ()
+                               elif ch == "R" or ch == "r":
+                                       self.on_reset_grid ()
                                elif ch == "S" or ch == "s":
                                        self.save_puzzle ()
                                elif ch == "E" or ch == "e":
@@ -304,6 +305,15 @@ class CrosswordPuzzleCreator:
                self.load_puzzle ()
                self.do_puzzle_loop ()
 
+       # when user chooses to reset grid
+       def on_reset_grid (self):
+               ans = raw_input (self.BRICKRED +
+                       "This will clear the entire grid! Are you sure (Y/N)? " + self.ENDCOL)
+               if ans == "y" or ans == "Y":
+                       self.puzzle.reset_grid ()
+                       sys.stdout.write (self.BLUE + "Grid has been cleared of all data!"
+                                               + self.ENDCOL + "\n")
+
        # Main application loop
        def do_main_loop (self):
                # display the menu