📄 pokegame.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 + -