]>
git.saurik.com Git - wxWidgets.git/blob - demos/forty/game.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Forty Thieves patience game
4 // Author: Chris Breeze
8 // Copyright: (c) 1993-1998 Chris Breeze
9 // Licence: wxWindows licence
10 //---------------------------------------------------------------------------
11 // Last modified: 22nd July 1998 - ported to wxWindows 2.0
12 /////////////////////////////////////////////////////////////////////////////
18 const int MaxMoves
= 800;
21 //---------------------------------------//
22 // A class which holds the pack of cards //
23 //---------------------------------------//
24 class Pack
: public Pile
{
28 void Redraw(wxDC
& dc
);
29 void ResetPile() { m_topCard
= NumCards
- 1; }
31 void AddCard(Card
* card
); // Add card
32 void AddCard(wxDC
& dc
, Card
* card
) { AddCard(card
); Redraw(dc
); }
36 //----------------------------------------------------------//
37 // A class which holds a base i.e. the initial 10 x 4 cards //
38 //----------------------------------------------------------//
39 class Base
: public Pile
{
43 bool AcceptCard(Card
* card
);
47 //----------------------------------------------------//
48 // A class which holds a foundation i.e. Ace, 2, 3... //
49 //----------------------------------------------------//
50 class Foundation
: public Pile
{
52 Foundation(int x
, int y
);
54 bool AcceptCard(Card
* card
);
58 //--------------------------------------//
59 // A class which holds the discard pile //
60 //--------------------------------------//
61 class Discard
: public Pile
{
63 Discard(int x
, int y
);
65 void Redraw(wxDC
& dc
);
66 void GetTopCardPos(int& x
, int& y
);
67 Card
* RemoveTopCard(wxDC
& dc
, int m_xOffset
, int m_yOffset
);
73 Game(int wins
, int games
, int score
);
76 void NewPlayer(int wins
, int games
, int score
);
77 void Deal(); // Shuffle and deal a new game
78 bool CanYouGo(int x
, int y
); // can card under (x,y) go somewhere?
79 bool HaveYouWon(); // have you won the game?
81 void Undo(wxDC
& dc
); // Undo the last go
82 void Redo(wxDC
& dc
); // Redo the last go
84 void Redraw(wxDC
& dc
);
85 void DisplayScore(wxDC
& dc
);
86 bool LButtonDown(wxDC
& dc
, int mx
, int my
); //
87 void LButtonUp(wxDC
& dc
, int mx
, int my
);
88 void LButtonDblClk(wxDC
& dc
, int mx
, int my
);
89 void MouseMove(wxDC
& dc
, int mx
, int my
);
91 int GetNumWins() const { return m_numWins
; }
92 int GetNumGames() const { return m_numGames
; }
93 int GetScore() const { return m_currentScore
+ m_totalScore
; }
95 bool InPlay() const { return m_inPlay
; }
98 bool DropCard(int x
, int y
, Pile
* pile
, Card
* card
);
99 // can the card at (x, y) be dropped on the pile?
100 Pile
* WhichPile(int x
, int y
); // which pile is (x, y) over?
101 void DoMove(wxDC
& dc
, Pile
* src
, Pile
* dest
);
103 bool m_inPlay
; // flag indicating that the game has started
110 int m_moveIndex
; // current position in undo/redo buffer
111 int m_redoIndex
; // max move index available for redo
113 // the various piles of cards
117 Foundation
* m_foundations
[8];
119 // variables to do with dragging cards
122 int m_xPos
, m_yPos
; // current coords of card being dragged
123 int m_xOffset
, m_yOffset
; // card/mouse offset when dragging a card
126 wxBitmap
* m_bmapCard
;
128 // variables to do with scoring