X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/82ea63e6e046652bc0799badd9d62f91c9918dbe..564098605facb4c5fa710255915324bfe83e100e:/demos/forty/game.cpp diff --git a/demos/forty/game.cpp b/demos/forty/game.cpp index fa1a29e434..e137996530 100644 --- a/demos/forty/game.cpp +++ b/demos/forty/game.cpp @@ -72,6 +72,30 @@ Game::Game(int wins, int games, int score) : } +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() { @@ -155,12 +179,42 @@ void Game::DoMove(wxDC& dc, Pile* src, Pile* dest) 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); + } + } } @@ -410,8 +464,8 @@ void Game::LButtonDblClk(wxDC& dc, int x, int y) { 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 &&