⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pokegame.h

📁 Brew下的塔罗牌游戏。游戏功能完整
💻 H
字号:
// PokeGame.h: interface for the CPokeGame class.
// 代码作者:侯宇
// 创建日期:2004/07/04
//////////////////////////////////////////////////////////////////////

#if!defined __POKEGAME_H__
#define	__POKEGAME_H__

#include "wnd.h"

//此处为控制动画的常量声明。动画的每个细节都在这里用常量表示了。需要改动动画在这里修改即可
//为了实现视觉效果不同的动画步骤之间用了不同的常量。一把抓出来的效果不好
//修改时请注意常量后的注释,注释里详细写了该常量控制了哪部分动画
//总体控制常量
#define		TIMER_UPDATE_INTERVAL		10	//进程刷新时间间隔,单位ms
#define		FRAMESKIP					2	//动画移动时每贞移动多少像素。此常量定义的较小。为了加快
											//速度,洗牌和发牌的常量都在此常量基础上的一个倍数

//不需要常量倍数的地方写名了此步动画完成的内容。每步都有写,请结合实际效果看一下,就可以区分出每步骤对应的动画片段了

//洗牌动画常量,未指明单位的话均为FRAMESKIP基础上的速度倍数
//步骤1:把牌分为上下两堆,按照m_arwPokePath1里指定的路径偏移移动,对齐
//步骤2:把两堆牌靠近的部分翘起一点
#define		XP_STEP3					1	//两堆牌靠近的一边翘起来以后互相靠近一些,出现重叠部分以便穿插
//步骤4、步骤5:将翘起的牌穿插到一起
#define		XP_STEP6					1	//穿插好以后后互相靠近合为一堆牌
#define		XP_STEP7					1	//合为一堆牌以后分为上下两堆分离开
//步骤8:把两堆牌由横向旋转为纵向
//步骤9:把两堆分别拉高一倍,牌与牌间出现同牌一样高的空隙,同时每张牌对齐另外一堆相应的空隙
#define		XP_STEP10					1	//将两堆牌靠近,每张牌刚好进入另一堆对应的空隙里
//步骤11:把整堆牌旋转移动到左上教。此步骤速度又旋转的贞数决定
#define		XP_STEP12					200	//静止的ms数,制造效果
//步骤13:将牌平铺开。
//步骤14:讲铺好的牌收回来
//步骤15:恢复牌堆形状
//步骤16:把牌堆旋转移动回屏幕中央
#define		XP_STEP17					200	//静止的ms数,制造效果
//步骤18:把牌堆分发到4个角上
#define		XP_STEP19					200	//静止的ms数,制造效果
//步骤20:把4个角的牌堆调转2次位置
//步骤22、步骤23、步骤24:从牌堆中间抽出一叠,放在最上面,重复3次
#define		XP_STEP25					1	//把牌堆移动到左边,准备发牌



//发牌动画常量,未指明单位的话均为FRAMESKIP基础上的速度倍数。临时队列即3次队列
//步骤1:初始化
#define		FP_STEP2_MOVE				5	//把1次队列取出的牌向临时纸牌队列移动
#define		FP_STEP2_DELAY				250	//移动完毕后延迟多少ms
#define		FP_STEP3_DELAY				100	//从1次队列旋转出2张牌放到临时队列后延迟多少ms
#define		FP_STEP4_DELAY				200	//把临时队列翻转为正面向上后延迟多少ms
#define		FP_STEP5_MOVE				5	//把临时纸牌队列移动到2次队列的速度
#define		FP_STEP5_DELAY				250	//移动完毕后延迟多少ms
#define		FP_STEP5_DELAY_SPECIAL		1000//抽到最后一张K的时候延迟多少ms
#define		FP_STEP6_MOVE				3	//1次纸牌队列用完,移动2次纸牌队列到1次的位置
#define		FP_STEP6_DELAY				0	//移动完后延迟多少ms。0为默认值TIMER_UPDATE_INTERVAL
#define		FP_STEP7_MOVE				5	//把符合要求的牌移动到结果队列
#define		FP_STEP7_DELAY				0	//移动完后延迟多少ms。0为默认值TIMER_UPDATE_INTERVAL
//步骤8-10为特殊处理:将最后一张K先横向移动到屏幕中央,上升,再归位
#define		FP_STEP8_MOVE				2	//向中央移动
#define		FP_STEP8_DELAY				0	//移动完后延迟多少ms。0为默认值TIMER_UPDATE_INTERVAL
#define		FP_STEP9_MOVE				2	//向顶部移动
#define		FP_STEP9_DELAY				500	//移动完后延迟多少ms。
#define		FP_STEP9_BACK				10	//移动到顶部中央设计了一个后错的视觉效果
											//此处为后错距离(FP_STEP9_BACK * FRAMESKIP个像素)
#define		FP_STEP10_MOVE				5	//向结果队列相应的位置移动
#define		FP_STEP10_DELAY				500	//移动完后延迟多少ms。0为默认值TIMER_UPDATE_INTERVAL




#define		FRAME_POKE					53	//52张正面牌+1张背面牌
#define		FRAME_POKEROTATE			10	//牌背面旋转图
#define		FRAME_POKEFOLD				4	//牌背面弯折图

#define		POKESPERPIXEL				5	//动画移动时每次移动多少像素
#define		TOTALPOKES					52	//牌总数

#define		DISTANCE_EDGE				2	//结果队列和边界的距离

#define		TIME_XP_3					3	//洗牌步骤3的次数

#define		BUFFERSIZE_RESULT			50	//每个结果字符串缓冲区大小

//游戏状态
#define		STATUS_START				0	//游戏开始
#define		STATUS_XP					1	//洗牌
#define		STATUS_FP					2	//发牌
#define		STATUS_RESULT				3	//洗牌

//牌色在牌列图中的偏移
#define		OFFSET_HEI					0	//黑桃
#define		OFFSET_HONG					13	//红桃
#define		OFFSET_HUA					26	//梅花
#define		OFFSET_PIAN					39	//方片

#define		ANIME_START					0	//动画起始

#define		BK_POKE_POS					((FRAME_POKE - 1) * m_rtPoke.x)


class CPokeGame : public CWnd
{
public:
	CPokeGame();
	virtual ~CPokeGame(void);
	virtual boolean Create(CShell *pShell, CDisplay *pDisplay);
	// 游戏定时器
	static void OnTimer(CPokeGame *pGame);
    //显示
	virtual void Update();
    //刷新平面
	virtual void UpdateEx();
	//消息处理
	virtual boolean HandleEvent(AEEEvent evt, uint16 wParam, uint32 dwParam);
	//暂停
	virtual void Pause();
	//恢复
	virtual void Resume();
protected:
	//洗牌动画
	void AnimeXP(void);
	//发牌动画
	void AnimeFP(void);
	//显示占卜结果
	void ShowResult(void);
	// 加载游戏元素图片
	boolean LoadObjectImages(void);

private:
	void StrFlash(uint16 nResID);
	int Random(int rand);//随机函数

	//占卜结果显示
	CStatic * m_pPokeResult;

	uint16 m_nStatus;					//游戏状态
	uint16 m_nAnimeStep;				//动画步骤
	uint16 m_nProcess;					//进程记数,控制闪动

	uint16 m_nPokeDistance;				//结果队列里每张牌的间隔
	AEERect m_rcAnime;					//动画、占卜结果的输出位置大小

	uint16 m_nTotalHeight;				//整叠牌厚度

	uint16 m_nDelayms;					//动画延迟时间级别

	uint16 m_arwPKQueue[TOTALPOKES];	//纸牌队列
	uint16 m_arwPKQueue_2[TOTALPOKES];	//2次纸牌队列
	uint16 m_arwPKQueueTmp[3];			//临时纸牌队列
	uint16 m_arwResult[13];				//结果队列

	uint16 m_nPosQueue;					//纸牌队列指针
	uint16 m_nPosQueue_2;				//2次纸牌队列指针
	uint16 m_nPosQueueTmp;				//临时纸牌队列指针
	uint16 m_nPosResult;				//结果队列指针

	uint16 m_nStartRow;					//从多少行开始显示
	uint16 m_nToTalRows;				//所有的结果需要多少行
	uint16 m_nCharHeight;				//本手机型号下一个字符的高度

	CBitmap *m_pBmpBuffer;				//屏幕缓冲图片
	CBitmap *m_pBmpBG;					//背景图片
	CBitmap *m_pBmpBGBk;				//背景图片备份
	CBitmap *m_pBmpTmp[3];				//中间缓冲
	AEEPoint m_rtTmp;
	AEERect m_rcTmp;
	NativeColor m_nTranscolor;			//缓冲的透明色

	//动画定位点
	AEEPoint m_ptAnime1;
	AEEPoint m_ptAnime2;
	AEEPoint m_ptAnime3;
	AEEPoint m_ptAnime4;
	AEEPoint m_ptAnime5;

	//游戏元素图片及参数
	CBitmap *m_pBmpPoke;
	AEEPoint m_rtPoke;

	CBitmap *m_pBmpPokeBkH;
	AEEPoint m_rtPokeBkH;

	CBitmap *m_pBmpPokeRotate;
	AEEPoint m_rtPokeRotate;

	CBitmap *m_pBmpPokeFold;
	AEEPoint m_rtPokeFold;

	AECHAR	 m_szFlashText[50];
};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -