[gnome-tetravex] Fix a bug.



commit a30768e9c90d265d2c24fd6522b191cdc36d581d
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Fri Sep 20 23:41:18 2019 +0200

    Fix a bug.
    
    Looks like you can select a
    tile after puzzle is solved
    because you gave up. Ooops.

 src/gnome-tetravex.vala |  5 +----
 src/puzzle-view.vala    |  4 ++--
 src/puzzle.vala         | 29 +++++++++++++++--------------
 3 files changed, 18 insertions(+), 20 deletions(-)
---
diff --git a/src/gnome-tetravex.vala b/src/gnome-tetravex.vala
index 428f7b8..b35368d 100644
--- a/src/gnome-tetravex.vala
+++ b/src/gnome-tetravex.vala
@@ -485,9 +485,6 @@ private class Tetravex : Gtk.Application
         {
             puzzle.solve ();
             new_game_solve_stack.set_visible_child_name ("new-game");
-            pause_action.set_enabled (false);
-            solve_action.set_enabled (false);
-            finish_action.set_enabled (false);
         }
     }
 
@@ -507,7 +504,7 @@ private class Tetravex : Gtk.Application
 
         if (size == settings.get_int (KEY_GRID_SIZE))
             return;
-        if (puzzle.game_in_progress)
+        if (puzzle.game_in_progress && !puzzle.is_solved)
         {
             MessageDialog dialog = new MessageDialog (window,
                                                       DialogFlags.MODAL,
diff --git a/src/puzzle-view.vala b/src/puzzle-view.vala
index 9bfb05c..76bf21e 100644
--- a/src/puzzle-view.vala
+++ b/src/puzzle-view.vala
@@ -491,7 +491,7 @@ private class PuzzleView : Gtk.DrawingArea
 
     protected override bool button_press_event (Gdk.EventButton event)
     {
-        if (puzzle.paused)
+        if (puzzle.paused || puzzle.is_solved)
             return false;
 
         if (event.button == 1)
@@ -554,7 +554,7 @@ private class PuzzleView : Gtk.DrawingArea
 
     protected override bool button_release_event (Gdk.EventButton event)
     {
-        if (puzzle.paused)
+        if (puzzle.paused || puzzle.is_solved)
             return false;
 
         if (event.button == 1 && selected_tile != null && selection_timeout == 0)
diff --git a/src/puzzle.vala b/src/puzzle.vala
index 921ce36..102ef6a 100644
--- a/src/puzzle.vala
+++ b/src/puzzle.vala
@@ -70,24 +70,23 @@ private class Puzzle : Object
     internal signal void show_end_game ();
     internal signal void tick ();
 
-    [CCode (notify = false)] internal bool is_solved
+    [CCode (notify = false)] internal bool is_solved { internal get; private set; default = false; }
+    private bool check_if_solved ()
     {
-        internal get
+        /* Solved if entire left hand side is complete (we ensure only tiles
+           that fit are allowed */
+        for (uint8 x = 0; x < size; x++)
         {
-            /* Solved if entire left hand side is complete (we ensure only tiles
-               that fit are allowed */
-            for (uint8 x = 0; x < size; x++)
+            for (uint8 y = 0; y < size; y++)
             {
-                for (uint8 y = 0; y < size; y++)
-                {
-                    Tile? tile = board [x, y];
-                    if (tile == null)
-                        return false;
-                }
+                Tile? tile = board [x, y];
+                if (tile == null)
+                    return false;
             }
-
-            return true;
         }
+
+        is_solved = true;
+        return true;
     }
 
     internal Puzzle (uint8 size)
@@ -253,7 +252,7 @@ private class Puzzle : Object
         if (t1 != null)
             tile_moved ((!) t1, x0, y0);
 
-        if (is_solved)
+        if (check_if_solved ())
         {
             stop_clock ();
             solved ();
@@ -368,6 +367,8 @@ private class Puzzle : Object
             tile_moved (tile, tile.x, tile.y);
         }
 
+        is_solved = true;
+        solved ();
         stop_clock ();
     }
 


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