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?
# 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):
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
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")
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")
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")
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":
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