}
+void Game::Layout()
+{
+ int i;
+
+ m_pack->SetPos(2, 2 + 4 * (CardHeight + 2));
+
+ m_discard->SetPos(2, 2 + 5 * (CardHeight + 2));
+
+ for (i = 0; i < 8; i++)
+ {
+ m_foundations[i]->SetPos(2 + (i / 4) * (CardWidth + 2),
+ 2 + (i % 4) * (CardHeight + 2));
+ }
+
+ for (i = 0; i < 10; i++)
+ {
+ m_bases[i]->SetPos(8 + (i + 2) * (CardWidth + 2), 2);
+ }
+ delete m_bmap;
+ delete m_bmapCard;
+ m_bmap = 0;
+ m_bmapCard = 0;
+}
+
// Make sure we delete all objects created by the game object
Game::~Game()
{
wxOK | wxICON_EXCLAMATION);
}
- if (!m_inPlay)
+ if (!m_inPlay)
{
m_inPlay = TRUE;
m_numGames++;
}
- DisplayScore(dc);
+ DisplayScore(dc);
+
+ if (HaveYouWon())
+ {
+ wxWindow *frame = wxTheApp->GetTopWindow();
+ wxWindow *canvas = (wxWindow *) NULL;
+
+ if (frame)
+ {
+ wxNode *node = frame->GetChildren().First();
+ if (node) canvas = (wxWindow*)node->Data();
+ }
+
+ // This game is over
+ m_inPlay = FALSE;
+
+ // Redraw the score box to update games won
+ DisplayScore(dc);
+
+ if (wxMessageBox("Do you wish to play again?",
+ "Well Done, You have won!", wxYES_NO | wxICON_QUESTION) == wxYES)
+ {
+ Deal();
+ canvas->Refresh();
+ }
+ else
+ {
+ // user cancelled the dialog - exit the app
+ ((wxFrame*)canvas->GetParent())->Close(TRUE);
+ }
+ }
}
{
for(i = 0; i < 4; i++)
{
- Card* m_topCard;
- if ((m_topCard = m_foundations[i]->GetTopCard()))
+ Card* m_topCard = m_foundations[i]->GetTopCard();
+ if ( m_topCard )
{
if (m_topCard->GetSuit() == card->GetSuit() &&
m_foundations[i + 4] != pile &&