From: Harishankar Date: Wed, 8 Dec 2010 05:37:13 +0000 (+0530) Subject: Clear grid and verify solution implemented X-Git-Url: https://harishankar.org/repos/?p=getaclue.git;a=commitdiff_plain;h=50103f2c3cb70ee8fad1b13e1ab6864a57c36c29 Clear grid and verify solution implemented Now clearing the puzzle grid and verifying the solution has been implemented --- diff --git a/crosswordpuzzle.py b/crosswordpuzzle.py index ffdd915..7ee206f 100644 --- a/crosswordpuzzle.py +++ b/crosswordpuzzle.py @@ -119,6 +119,11 @@ class NoWordsException (Exception): def __init__ (self): self.msg = "No words in grid" +# exception to raise when solution is imcomplete when trying to verify it +class IncompleteSolutionException (Exception): + def __init__ (self): + self.msg = "Solution incomplete" + class CrosswordPuzzle: def __init__ (self, rows, cols): # define number of rows and columns @@ -643,4 +648,31 @@ class CrosswordPuzzle: for col in range (self.cols): self.data[row][col].revealed = revealed + # clear the guesses for the board + def clear_guesses (self): + # run through the grid and set the guesses to None + for row in range (self.rows): + for col in range (self.cols): + self.data[row][col].guess = None + + # verify the solution - return True if all guessed characters are correct + # return False if some of them are wrong. + # if the board is not completed as yet, raise a IncompleteSolutionException + def is_solution_correct (self): + # run through the grid and check for each character in occupied cells + flag = True + for row in range (self.rows): + for col in range (self.cols): + if (self.data[row][col].occupied_across is True or + self.data[row][col].occupied_down is True): + # if there is no guess at a particular location raise + # the incomplete solution exception + if not self.data[row][col].guess: + raise IncompleteSolutionException + # if a character doesn't match, return False + if self.data[row][col].char <> self.data[row][col].guess: + flag = False + + # finally return result + return flag diff --git a/player_mainwindow.py b/player_mainwindow.py index b384b54..8ee60a7 100644 --- a/player_mainwindow.py +++ b/player_mainwindow.py @@ -33,6 +33,43 @@ class MainWindow: self.gtk_main_quit () + # callback for menu item clear grid activated event + def on_cleargrid_activate (self, menuitem): + if self.puzzle: + dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL, + gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, + "Are you sure you wish to clear your entries?") + if dlg.run () == gtk.RESPONSE_YES: + # clear the guesses + self.puzzle.clear_guesses () + # redraw the grid + puzgrid = self.ui.get_object ("puzzlegrid") + puzgrid.queue_draw () + dlg.destroy() + + # callback for menu item verify board activated event + def on_verify_activate (self, menuitem): + if self.puzzle: + try: + ans = self.puzzle.is_solution_correct () + # if the solution is correct + if ans: + dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL, + gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, + "Success! Your entries are correct.") + dlg.run () + else: + dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL, + gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, + "Your solution has some errors. Fix them and try again") + dlg.run () + except crosswordpuzzle.IncompleteSolutionException: + dlg = gtk.MessageDialog (self.window, gtk.DIALOG_MODAL, + gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, + "You've not completed the board yet. Cannot verify") + dlg.run () + dlg.destroy () + # callback for menu item hide solution activated event def on_hidesolution_activate (self, menuitem): if self.puzzle: diff --git a/playerwindow.glade b/playerwindow.glade index 500f359..cde1419 100644 --- a/playerwindow.glade +++ b/playerwindow.glade @@ -87,6 +87,7 @@ True _Verify your board... True + @@ -94,6 +95,7 @@ True _Clear all... True +