From 5f68ccac12372c5271c21e9045558d2d03e92a41 Mon Sep 17 00:00:00 2001 From: Harishankar Date: Mon, 6 Dec 2010 11:05:15 +0530 Subject: [PATCH] Reset grid functionality implemented Implemented resetting the grid. This wipes out all grid data from the grid, including words, clues etc. --- crosswordpuzzle.py | 71 +++++++++++++++++++++++++++++++++++++-- crosswordpuzzlecreator.py | 22 ++++++++---- 2 files changed, 84 insertions(+), 9 deletions(-) diff --git a/crosswordpuzzle.py b/crosswordpuzzle.py index 7d3b270..57878b8 100644 --- a/crosswordpuzzle.py +++ b/crosswordpuzzle.py @@ -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 diff --git a/crosswordpuzzlecreator.py b/crosswordpuzzlecreator.py index 5a0ae11..1e62315 100644 --- a/crosswordpuzzlecreator.py +++ b/crosswordpuzzlecreator.py @@ -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 -- 2.20.1