|
|
/***************************************************************************/ /** Microsoft Windows **/ /** Copyright(c) Microsoft Corp., 1991, 1992 **/ /***************************************************************************/
/****************************************************************************
card.h
Feb 92, JimH
Header file for class card
****************************************************************************/
#ifndef CARD_INC
#define CARD_INC
// typedefs for pointers to functions in cards.dll
// cdtTerm() can use standard FARPROC
typedef BOOL (FAR PASCAL *DRAWPROC)(HDC, int, int, int, int, DWORD); typedef BOOL (FAR PASCAL *INITPROC)(int FAR *, int FAR *);
const int EMPTY = -1; const int FACEUP = 0; const int FACEDOWN = 1; const int HILITE = 2; const int CARDBACK = 54; const int ACE = 0; const int QUEEN = 11; const int KING = 12;
const int TWOCLUBS = 4; const int BLACKLADY = 47; const int CLUBS = 0; const int DIAMONDS = 1; const int HEARTS = 2; const int SPADES = 3;
const int POPSPACING = 20; // selected cards pop up this high
const int MAXSUIT = 4;
enum statetype { NORMAL, SELECTED, PLAYED, HIDDEN };
class card {
private: int id; // 0 to 51
POINT loc; // current top-left corner loc.
statetype state; // selected or hidden?
static int count; // number of card instances
static int stepsize; // size of glide() steps
static HINSTANCE hCardsDLL; // handle to cards.dll
static INITPROC lpcdtInit; // ptr to cards.cdtInit()
static DRAWPROC lpcdtDraw; // ptr to cards.cdtDraw()
static FARPROC lpcdtTerm; // ptr to cards.cdtTerm()
static CBitmap m_bmFgnd; // animation card
static CBitmap m_bmBgnd2; // background dest bitmap
static CDC m_MemB, m_MemB2; // memory DCs for bkgnd bitmaps
static CRgn m_Rgn1, m_Rgn2; // hRgn1 is source, hRgn2 is dest
static CRgn m_Rgn; // combined region
static DWORD dwPixel[12]; // corner pixels for save/restore
VOID GlideStep(CDC &dc, int x1, int y1, int x2, int y2); VOID SaveCorners(CDC &dc, int x, int y); VOID RestoreCorners(CDC &dc, int x, int y); int IntSqrt(long square);
public: static BOOL bConstructed; static int dxCrd, dyCrd; // size of card bitmap
static CBitmap m_bmBgnd; // what's under card to glide
card(int n = EMPTY); ~card();
int ID() { ASSERT(this != NULL); return id; } int Suit() { ASSERT(this != NULL); return (id % MAXSUIT); } int Value() { ASSERT(this != NULL); return (id / MAXSUIT); } int Value2() { int v = Value(); return ((v == ACE) ? (KING + 1) : v); } VOID Select(BOOL b) { state = (b ? SELECTED : NORMAL); } BOOL IsEmpty() { ASSERT(this != NULL); return (id == EMPTY); } BOOL IsSelected() { ASSERT(this != NULL); return (state == SELECTED); } BOOL IsPlayed() { ASSERT(this != NULL); return (state == PLAYED); } BOOL IsHeart() { return (Suit() == HEARTS); } BOOL IsValid() { return ((this != NULL) && (id != EMPTY)); }
VOID SetID(int n) { id = n; } VOID SetLoc(int x, int y) { loc.x = x; loc.y = y; } int SetStepSize(int s) { int old = stepsize; stepsize = s; return old;} int GetX(void) { return loc.x; } int GetY(void) { return loc.y; }
BOOL Draw(CDC &dc, int x, int y, int mode = FACEUP, BOOL bUpdateLoc = TRUE); BOOL Draw(CDC &dc) { return Draw(dc, loc.x, loc.y, FACEUP); } BOOL Draw(CDC &dc, int mode) { return Draw(dc, loc.x, loc.y, mode); } BOOL PopDraw(CDC &dc); // draw with selections popped
BOOL CleanDraw(CDC &dc); // draw with clean corners
VOID Glide(CDC &dc, int xEnd, int yEnd); CRect &GetRect(CRect& rect); VOID Remove() { state = HIDDEN; id = EMPTY; } VOID Play() { state = PLAYED; } BOOL IsNormal() { return (state == NORMAL); } BOOL IsInHand() { return ((state == NORMAL) || (state == SELECTED)); } };
#endif // conditional include
|