Easy corner for new wxBombers (as requested in patch #1178276).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33972 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba
2005-05-06 18:07:14 +00:00
parent 4377d3abc8
commit 43c3922bb0
4 changed files with 52 additions and 9 deletions

View File

@@ -61,11 +61,12 @@ bool BombsApp::OnInit()
}
BEGIN_EVENT_TABLE(BombsFrame, wxFrame)
EVT_MENU(bombsID_EASY, BombsFrame::OnNewEasyGame)
EVT_MENU(bombsID_MEDIUM, BombsFrame::OnNewMediumGame)
EVT_MENU(bombsID_HARD, BombsFrame::OnNewHardGame)
EVT_MENU(wxID_EXIT, BombsFrame::OnExit)
EVT_MENU(wxID_ABOUT, BombsFrame::OnAbout)
EVT_MENU(bombsID_EASY, BombsFrame::OnNewEasyGame)
EVT_MENU(bombsID_MEDIUM, BombsFrame::OnNewMediumGame)
EVT_MENU(bombsID_HARD, BombsFrame::OnNewHardGame)
EVT_MENU(bombsID_EASYCORNER, BombsFrame::OnEasyCorner)
EVT_MENU(wxID_EXIT, BombsFrame::OnExit)
EVT_MENU(wxID_ABOUT, BombsFrame::OnAbout)
END_EVENT_TABLE()
BombsFrame::BombsFrame(BombsGame *game)
@@ -73,6 +74,8 @@ BombsFrame::BombsFrame(BombsGame *game)
wxSize(300, 300), wxDEFAULT_DIALOG_STYLE|wxMINIMIZE_BOX)
{
m_game = game;
m_easyCorner = false;
m_lastLevel = bombsID_EASY;
SetIcon(wxICON(bombs));
@@ -90,6 +93,7 @@ BombsFrame::BombsFrame(BombsGame *game)
menuFile->Append(bombsID_NEWGAME, wxT("&New Game"),
menuLevel, wxT("Starts a new game"));
menuFile->AppendCheckItem(bombsID_EASYCORNER, wxT("&Easy corner"));
menuFile->AppendSeparator();
menuFile->Append(wxID_EXIT, wxGetStockLabel(wxID_EXIT), wxT("Quits the application"));
@@ -137,6 +141,7 @@ void BombsFrame::NewGame(int level, bool query)
}
int numHorzCells = 20, numVertCells = 20;
m_lastLevel = level;
switch(level)
{
@@ -157,7 +162,7 @@ void BombsFrame::NewGame(int level, bool query)
break;
}
m_game->Init(numHorzCells, numVertCells);
m_game->Init(numHorzCells, numVertCells, m_easyCorner);
GetMenuBar()->Check(level, true);
@@ -187,6 +192,30 @@ void BombsFrame::OnNewHardGame(wxCommandEvent& WXUNUSED(event))
NewGame(bombsID_HARD, true);
}
void BombsFrame::OnEasyCorner(wxCommandEvent& WXUNUSED(event))
{
wxString msg;
if(m_easyCorner)
msg = wxT("enable");
else
msg = wxT("disable");
msg = wxT("Do you really want to ") + msg + wxT(" having\ntop left corner always empty for easier start?");
int ok = wxMessageBox(
msg,
wxT("Confirm"),
wxYES_NO | wxICON_QUESTION,
this
);
if(ok!=wxYES)return;
m_easyCorner = !m_easyCorner;
NewGame(m_lastLevel, true);
}
BEGIN_EVENT_TABLE(BombsCanvas, wxPanel)
EVT_PAINT(BombsCanvas::OnPaint)
EVT_MOUSE_EVENTS(BombsCanvas::OnMouseEvent)

View File

@@ -49,11 +49,15 @@ private:
void OnNewMediumGame(wxCommandEvent& event);
void OnNewHardGame(wxCommandEvent& event);
void OnEasyCorner(wxCommandEvent& event);
void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
BombsGame *m_game;
bool m_easyCorner;
int m_lastLevel;
// Subwindows for reference within the program.
BombsCanvas *m_canvas;
@@ -67,7 +71,8 @@ enum
bombsID_NEWGAME = wxID_HIGHEST,
bombsID_EASY,
bombsID_MEDIUM,
bombsID_HARD
bombsID_HARD,
bombsID_EASYCORNER
};
class BombsCanvas : public wxPanel

View File

@@ -43,7 +43,7 @@ BombsGame::~BombsGame()
}
// 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;
@@ -75,6 +75,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++)

View File

@@ -76,7 +76,7 @@ public:
bool Init(int width, int height);
bool Init(int width, int height, bool easyCorner = false);
// Marks/unmarks a cell