X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/82ea63e6e046652bc0799badd9d62f91c9918dbe..ddf9d04fe9c4aa5d7319c5eb7eabcf781a157c3d:/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 &&