]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/bombs/game.cpp
avoid duplication in native dialog
[wxWidgets.git] / demos / bombs / game.cpp
index 3778780869ebafe2d9fca0168d9cb25ac5e8e5d1..ae07b7dac09f19db8eba06bdba4aff8f5b0a8734 100644 (file)
@@ -2,17 +2,13 @@
 // Name:        bombs1.cpp
 // Purpose:     Implementation of the class BombsGame
 // Author:      P. Foggia 1996
 // Name:        bombs1.cpp
 // Purpose:     Implementation of the class BombsGame
 // Author:      P. Foggia 1996
-// Modified by: Wlodzimierz Skiba (ABX) 2003
+// Modified by: Wlodzimierz Skiba (ABX) since 2003
 // Created:     1996
 // RCS-ID:      $Id$
 // Copyright:   (c) 1996 P. Foggia
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // Created:     1996
 // RCS-ID:      $Id$
 // Copyright:   (c) 1996 P. Foggia
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#   pragma implementation
-#endif
-
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
@@ -43,7 +39,7 @@ BombsGame::~BombsGame()
 }
 
 // Initialize the play field. Returns false on failure
 }
 
 // Initialize the play field. Returns false on failure
-bool BombsGame::Init(int aWidth, int aHeight)
+bool BombsGame::Init(int aWidth, int aHeight, bool easyCorner)
 {
     m_gridFocusX = m_gridFocusY = -1;
 
 {
     m_gridFocusX = m_gridFocusY = -1;
 
@@ -75,6 +71,15 @@ bool BombsGame::Init(int aWidth, int aHeight)
         }
     }
 
         }
     }
 
+    /* Force (0,0) not to have a bomb for those that don't want to have
+       to guess on the first move. Better would be to for the MS rule that
+       whatever is picked first isn't a bomb.
+     */
+    if(easyCorner)
+    {
+        m_field[0] = BG_HIDDEN;
+    }
+
     m_numBombCells = 0;
     for(x=0; x<m_width; x++)
         for(y=0; y<m_height; y++)
     m_numBombCells = 0;
     for(x=0; x<m_width; x++)
         for(y=0; y<m_height; y++)
@@ -90,6 +95,7 @@ bool BombsGame::Init(int aWidth, int aHeight)
             }
 
     m_numRemainingCells = m_height*m_width-m_numBombCells;
             }
 
     m_numRemainingCells = m_height*m_width-m_numBombCells;
+    m_numMarkedCells = 0;
 
     return true;
 }
 
     return true;
 }
@@ -97,15 +103,22 @@ bool BombsGame::Init(int aWidth, int aHeight)
 void BombsGame::Mark(int x, int y)
 {
     m_field[x+y*m_width] ^= BG_MARKED;
 void BombsGame::Mark(int x, int y)
 {
     m_field[x+y*m_width] ^= BG_MARKED;
+    if (IsMarked(x, y))
+        m_numMarkedCells++;
+    else
+        m_numMarkedCells--;
 }
 
 }
 
-void BombsGame::Unhide(int x, int y)
+void BombsGame::Unhide(int x, int y, bool b_selected)
 {
     if (!IsHidden(x,y))
     {
         return;
     }
 
 {
     if (!IsHidden(x,y))
     {
         return;
     }
 
+    if (b_selected)
+        m_field[x+y*m_width] |= BG_SELECTED;
+
     m_field[x+y*m_width] &= ~BG_HIDDEN;
 
     if (!IsBomb(x,y))
     m_field[x+y*m_width] &= ~BG_HIDDEN;
 
     if (!IsBomb(x,y))