eliminate warnings, fix bug that locked up game when single-clicking a card Modified: trunk/rosapps/games/solitaire/cardlib/cardbutton.cpp Modified: trunk/rosapps/games/solitaire/cardlib/cardcolor.cpp Modified: trunk/rosapps/games/solitaire/cardlib/cardcount.cpp Modified: trunk/rosapps/games/solitaire/cardlib/cardlib.cpp Modified: trunk/rosapps/games/solitaire/cardlib/cardregion.cpp Modified: trunk/rosapps/games/solitaire/cardlib/cardregion.h Modified: trunk/rosapps/games/solitaire/cardlib/cardrgnmouse.cpp Modified: trunk/rosapps/games/solitaire/cardlib/cardwindow.cpp Modified: trunk/rosapps/games/solitaire/makefile Modified: trunk/rosapps/games/solitaire/solgame.cpp Modified: trunk/rosapps/games/solitaire/solitaire.cpp _____
Modified: trunk/rosapps/games/solitaire/cardlib/cardbutton.cpp --- trunk/rosapps/games/solitaire/cardlib/cardbutton.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/cardlib/cardbutton.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -20,7 +20,7 @@
CardButton::CardButton(CardWindow &parent, int Id, TCHAR *szText, UINT Style, bool visible, int x, int y, int width, int height)
- : parentWnd(parent), id(Id), fVisible(visible), uStyle(Style), ButtonCallback(0) + : parentWnd(parent), id(Id), uStyle(Style), fVisible(visible), ButtonCallback(0) { crText = RGB(255,255,255); crBack = RGB(0, 128, 0); _____
Modified: trunk/rosapps/games/solitaire/cardlib/cardcolor.cpp --- trunk/rosapps/games/solitaire/cardlib/cardcolor.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/cardlib/cardcolor.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -186,28 +186,12 @@
COLORREF ColorDarker(COLORREF col, double ratio) { - static double Hue, Lum, Sat; - - //RGBtoHLS(col, &Hue, &Lum, &Sat); - - //col = HLStoRGB(Hue, fMax(0.0,Lum-ratio), Sat); - return ColorScaleHSL(col, RGB(0,0,0), ratio); - - //return col; }
COLORREF ColorLighter(COLORREF col, double ratio) { - static double Hue, Lum, Sat; - - //RGBtoHLS(col, &Hue, &Lum, &Sat); - - //col = HLStoRGB(Hue, fMin(1.0,Lum+ratio), Sat); - return ColorScaleHSL(col, RGB(255,255,255), ratio); - - //return col; }
// _____
Modified: trunk/rosapps/games/solitaire/cardlib/cardcount.cpp --- trunk/rosapps/games/solitaire/cardlib/cardcount.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/cardlib/cardcount.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -87,4 +87,4 @@
if(count[index] > 0) count[index]--; -} \ No newline at end of file +} _____
Modified: trunk/rosapps/games/solitaire/cardlib/cardlib.cpp --- trunk/rosapps/games/solitaire/cardlib/cardlib.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/cardlib/cardlib.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -10,7 +10,7 @@
void LoadCardBitmaps(void);
-static bool __CARDLIB_ACES_HIGH = false; +//static bool __CARDLIB_ACES_HIGH = false; extern double __CARDZOOMSPEED;
// _____
Modified: trunk/rosapps/games/solitaire/cardlib/cardregion.cpp --- trunk/rosapps/games/solitaire/cardlib/cardregion.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/cardlib/cardregion.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -16,7 +16,7 @@
void PaintRect(HDC hdc, RECT *rect, COLORREF colour);
CardRegion::CardRegion(CardWindow &parent, int Id, bool visible, int x, int y, int xOffset, int yOffset) -: parentWnd(parent), id(Id), fVisible(visible), xpos(x), ypos(y), xoffset(xOffset), yoffset(yOffset) +: id(Id), parentWnd(parent), xpos(x), ypos(y), xoffset(xOffset), yoffset(yOffset), fVisible(visible) { width = __cardwidth; height = __cardheight; @@ -56,7 +56,7 @@
nFlashCount = 0; fFlashVisible = false; - uFlashTimer = -1; + uFlashTimer = (UINT)-1;
fMouseDragging = false;
@@ -331,25 +331,25 @@
void CardRegion::StopFlash() { - if(uFlashTimer != -1) + if(uFlashTimer != (UINT)-1) { KillTimer((HWND)parentWnd, uFlashTimer); nFlashCount = 0; - uFlashTimer = -1; + uFlashTimer = (UINT)-1; fFlashVisible = true; } }
void CardRegion::DoFlash() { - if(uFlashTimer != -1) + if(uFlashTimer != (UINT)-1) { fFlashVisible = !fFlashVisible;
if(--nFlashCount == 0) { KillTimer((HWND)parentWnd, uFlashTimer); - uFlashTimer = -1; + uFlashTimer = (UINT)-1; fFlashVisible = true; } @@ -655,4 +655,4 @@ }
return true; -} \ No newline at end of file +} _____
Modified: trunk/rosapps/games/solitaire/cardlib/cardregion.h --- trunk/rosapps/games/solitaire/cardlib/cardregion.h 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/cardlib/cardregion.h 2005-03-10 04:58:40 UTC (rev 13907) @@ -147,12 +147,12 @@
bool fMouseDragging;
- int xoffset; //direction that cards take - int yoffset; - int xpos; //coordinates of stack int ypos;
+ int xoffset; //direction that cards take + int yoffset; + int width; //stack-size of all cards int height;
_____
Modified: trunk/rosapps/games/solitaire/cardlib/cardrgnmouse.cpp --- trunk/rosapps/games/solitaire/cardlib/cardrgnmouse.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/cardlib/cardrgnmouse.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -6,11 +6,18 @@
// #include <windows.h> #include <math.h> +#include <stdio.h>
#include "cardlib.h" #include "cardwindow.h" #include "cardregion.h"
+#if 1 +#define TRACE(s) +#else +#define TRACE(s) printf("%s(%i): %s",__FILE__,__LINE__,s) +#endif + double __CARDZOOMSPEED = 32;
int ClipCard(HDC hdc, int x, int y, int width, int height); @@ -304,8 +311,10 @@ // If have found a stack to drop onto // + TRACE ( "can I drop card?\n" ); if(pDestStack && pDestStack->CanDropCards(dragstack)) { + TRACE ( "yes, dropping card\n" ); hdc = GetDC((HWND)parentWnd); // UseNicePalette(hdc); ZoomCard(hdc, x - mousexoffset, y - mouseyoffset, pDestStack); @@ -332,25 +341,32 @@ pDestStack->AddCallback(*pDestStack, pDestStack->cardstack);//index, deststack->numcards); RedrawIfNotDim(pDestStack, true); - } + TRACE ( "done dropping card\n" ); + }
// // Otherwise, let the cards snap back onto this stack // else { - + TRACE ( "no, putting card back\n" ); hdc = GetDC((HWND)parentWnd); + TRACE ( "calling ZoomCard()\n" ); ZoomCard(hdc, x - mousexoffset, y - mouseyoffset, this); + TRACE ( "cardstack += dragstack\n" ); cardstack += dragstack; + TRACE ( "calling ReleaseDC()\n" ); ReleaseDC((HWND)parentWnd, hdc);
+ TRACE ( "calling Update()\n" ); Update(); //Update this stack's card count + size + TRACE ( "done putting card back\n" ); } ReleaseDragBitmaps(); ReleaseCapture(); + TRACE ( "OnLButtonUp() done\n" ); return true; }
@@ -531,6 +547,7 @@ #else void CardRegion::ZoomCard(HDC hdc, int xpos, int ypos, CardRegion *pDestStack) { + TRACE ( "ENTER ZoomCard()\n" ); double dx, dy, x ,y; int apparentcards; x = (double)xpos; y = (double)ypos; @@ -552,6 +569,11 @@ //normalise the motion vector dx = idestx - x; dy = idesty - y; + if ( fabs(dx) + fabs(dy) < 0.001f ) + { + MoveDragCardTo(hdc, idestx, idesty); + return; + } double recip = 1.0 / sqrt(dx*dx + dy*dy); dx *= recip * __CARDZOOMSPEED; dy *= recip * __CARDZOOMSPEED;
@@ -566,7 +588,8 @@
ix = (int)x; iy = (int)y; - if(dx < 0.0 && ix < idestx) ix = idestx; + + if(dx < 0.0 && ix < idestx) ix = idestx; else if(dx > 0.0 && ix > idestx) ix = idestx; else attarget = false;
@@ -614,5 +637,6 @@
Sleep(10); } + TRACE ( "EXIT ZoomCard()\n" ); } #endif _____
Modified: trunk/rosapps/games/solitaire/cardlib/cardwindow.cpp --- trunk/rosapps/games/solitaire/cardlib/cardwindow.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/cardlib/cardwindow.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -282,7 +282,6 @@
{ int i; RECT rect; - int xpos = 10; HPALETTE hOldPal;
hOldPal = UseNicePalette(hdc, __hPalette); _____
Modified: trunk/rosapps/games/solitaire/makefile --- trunk/rosapps/games/solitaire/makefile 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/makefile 2005-03-10 04:58:40 UTC (rev 13907) @@ -4,6 +4,8 @@
TARGET_TYPE = program
TARGET_APPTYPE = windows +# change to console for debugging purposes... +#TARGET_APPTYPE = console
TARGET_INSTALLDIR = system32
_____
Modified: trunk/rosapps/games/solitaire/solgame.cpp --- trunk/rosapps/games/solitaire/solgame.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/solgame.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -1,16 +1,24 @@
#include <windows.h> #include <commctrl.h> #include <tchar.h> +#include <stdio.h> #include "resource.h" #include "cardlib/cardlib.h" //#include "../catch22lib/trace.h" #include "solitaire.h"
+#if 1 +#define TRACE(s) +#else +#define TRACE(s) printf("%s(%i): %s",__FILE__,__LINE__,s) +#endif + CardStack activepile; bool fGameStarted = false;
void NewGame(void) { + TRACE("ENTER NewGame()\n"); int i, j;
SolWnd.EmptyStacks(); @@ -44,6 +52,7 @@ SolWnd.Redraw();
fGameStarted = false; + TRACE("EXIT NewGame()\n"); }
// @@ -56,6 +65,7 @@ // bool CARDLIBPROC RowStackDragProc(CardRegion &stackobj, int iNumDragCards) { + TRACE("ENTER RowStackDragProc()\n"); int numfacedown; int numcards;
@@ -63,6 +73,7 @@
numcards = stackobj.NumCards();
+ TRACE("EXIT RowStackDragProc()\n"); if(iNumDragCards <= numcards-numfacedown) return true; else @@ -76,13 +87,17 @@ // bool CARDLIBPROC RowStackDropProc(CardRegion &stackobj, const CardStack &dragcards) { + TRACE("ENTER RowStackDropProc()\n"); Card dragcard = dragcards[dragcards.NumCards() - 1];
//if we are empty, can only drop a stack with a King at bottom if(stackobj.NumCards() == 0) { if(dragcard.LoVal() != 13) + { + TRACE("EXIT RowStackDropProc(false)\n"); return false; + } } else { @@ -90,14 +105,21 @@ //can only drop if card is 1 less if(mystack[0].LoVal() != dragcard.LoVal() + 1) + { + TRACE("EXIT RowStackDropProc(false)\n"); return false; + }
//can only drop if card is different colour if( mystack[0].IsBlack() && !dragcard.IsRed() || !mystack[0].IsBlack() && dragcard.IsRed() ) + { + TRACE("EXIT RowStackDropProc(false)\n"); return false; + } }
+ TRACE("EXIT RowStackDropProc(true)\n"); return true; }
@@ -107,6 +129,7 @@ // bool CanDrop(CardRegion &stackobj, Card card) { + TRACE("ENTER CanDrop()\n"); int topval;
const CardStack &cardstack = stackobj.GetCardStack(); @@ -115,6 +138,7 @@ { if(card.Suit() != cardstack[0].Suit()) { + TRACE("EXIT CanDrop()\n"); return false; }
@@ -127,8 +151,12 @@
//make sure 1 higher if(card.LoVal() != (topval + 1)) + { + TRACE("EXIT CanDrop()\n"); return false; + }
+ TRACE("EXIT CanDrop()\n"); return true; }
@@ -137,13 +165,17 @@ // bool CARDLIBPROC SuitStackDropProc(CardRegion &stackobj, const CardStack &dragcards) { - int topval = 0; - + TRACE("ENTER SuitStackDropProc()\n"); //only drop 1 card at a time if(dragcards.NumCards() != 1) + { + TRACE("EXIT SuitStackDropProc()\n"); return false; + }
- return CanDrop(stackobj, dragcards[0]); + bool b = CanDrop(stackobj, dragcards[0]); + TRACE("EXIT SuitStackDropProc()\n"); + return b; }
// @@ -152,6 +184,7 @@ // void CARDLIBPROC RowStackClickProc(CardRegion &stackobj, int iNumClicked) { + TRACE("ENTER RowStackClickProc()\n"); int numfacedown; stackobj.GetFaceDirection(&numfacedown); @@ -163,6 +196,7 @@ stackobj.SetFaceDirection(CS_FACE_DOWNUP, numfacedown); stackobj.Redraw(); } + TRACE("EXIT RowStackClickProc()\n"); }
// @@ -170,12 +204,17 @@ // CardRegion *FindSuitStackFromCard(Card card) { + TRACE("ENTER FindSuitStackFromCard()\n"); for(int i = 0; i < 4; i++) { if(CanDrop(*pSuitStack[i], card)) + { + TRACE("EXIT FindSuitStackFromCard()\n"); return pSuitStack[i]; + } }
+ TRACE("EXIT FindSuitStackFromCard()\n"); return 0; }
@@ -187,6 +226,7 @@ // void CARDLIBPROC SuitStackAddProc(CardRegion &stackobj, const CardStack &added) { + TRACE("ENTER SuitStackAddProc()\n"); bool fGameOver = true;
for(int i = 0; i < 4; i++) @@ -207,6 +247,7 @@ pSuitStack[i]->Flash(11, 100); } } + TRACE("EXIT SuitStackAddProc()\n"); }
// @@ -216,9 +257,13 @@ // void CARDLIBPROC RowStackDblClickProc(CardRegion &stackobj, int iNumClicked) { + TRACE("ENTER RowStackDblClickProc()\n"); //can only move 1 card at a time if(iNumClicked != 1) + { + TRACE("EXIT RowStackDblClickProc()\n"); return; + }
//find a suit-stack to move the card to... const CardStack &cardstack = stackobj.GetCardStack(); @@ -231,6 +276,7 @@ //AddProc callbacks called for us on the destination stacks... stackobj.SimulateDrag(pDest, 1, true); } + TRACE("EXIT RowStackDblClickProc()\n"); }
// @@ -238,7 +284,9 @@ // void CARDLIBPROC PileDblClickProc(CardRegion &stackobj, int iNumClicked) { + TRACE("ENTER PileDblClickProc()\n"); RowStackDblClickProc(stackobj, iNumClicked); + TRACE("EXIT PileDblClickProc()\n"); }
// @@ -246,6 +294,7 @@ // void CARDLIBPROC PileRemoveProc(CardRegion &stackobj, int iItems) { + TRACE("ENTER PileRemoveProc()\n"); //modify our "virtual" pile by removing the same card //that was removed from the physical card stack activepile.Pop(iItems); @@ -259,6 +308,7 @@ stackobj.SetOffsets(0,0); stackobj.SetCardStack(activepile); } + TRACE("EXIT PileRemoveProc()\n"); }
// @@ -267,6 +317,7 @@ // void CARDLIBPROC DeckClickProc(CardRegion &stackobj, int iNumClicked) { + TRACE("ENTER DeckClickProc()\n"); CardStack cardstack = stackobj.GetCardStack(); CardStack pile = pPile->GetCardStack();
@@ -305,4 +356,5 @@ pPile->SetCardStack(pile);
SolWnd.Redraw(); + TRACE("EXIT DeckClickProc()\n"); } _____
Modified: trunk/rosapps/games/solitaire/solitaire.cpp --- trunk/rosapps/games/solitaire/solitaire.cpp 2005-03-10 04:10:24 UTC (rev 13906) +++ trunk/rosapps/games/solitaire/solitaire.cpp 2005-03-10 04:58:40 UTC (rev 13907) @@ -28,6 +28,11 @@
lstrcpy(ptr + 1, szExt); }
+int main ( int argc, char** argv ) +{ + return WinMain ( NULL, NULL, NULL, SW_SHOW ); +} + // // Main entry point //