小游戏黄金矿工设计报告_第1页
小游戏黄金矿工设计报告_第2页
小游戏黄金矿工设计报告_第3页
小游戏黄金矿工设计报告_第4页
小游戏黄金矿工设计报告_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、M喩孕f技水孝University of Science and Technology BeijingC语言课程设计报告机房名称 时 间学 院专业班级姓名学号指导教师C语言课程设计报告小游戏“黄金矿工”设计报告目录C语言课程设计报告 1一、课题简述 3二、功能需求 4I. 程序大体流程图: 4II .部分函数介绍 5Fun code 接口介绍 5三、总体设计 81. 下图为主函数及各级嵌套函数的流程图,部分省略。82、操作使用说明 10四、详细设计 111. 主函数模块 WinMain ()函数模块 112. 部分自己设置定义的函数 15五、运行相关界面及简介 26六、程序运行测试及遇到问题的

2、解决方案 32七、成员分工表 34八、总结与体会 35九、教师评语 36一、课题简述通过一年的c语言程序设计的学习,我们仅仅掌握了c语言最基本的知识,还有很多内容是我们没有涉及的。所以通过 c语言课程设计的学习实践活动和实际演练,使我们能够在实际操作 中提高运用c语言解决问题的能力和程序设计的能力。得知本次课程设计任务是小游戏的设计,我们既兴奋又不安, 兴奋是十分期待自己亲手做出的游戏,不安的是我们对 fun code这个软件很不了解。幸好这次实践的过程,让我们从做平时简 单的小程序过渡到现在的综合应用程序,将学过的c语言知识融入新接触到的 fun code操作中,不仅能巩固所学的知识,还能加

3、强对新事物的接受及应用的本领,在不断的挑战问题中大大的提升自己,同时也是对 c语言程序设计这门课的深入理解的过程。而什么样的小游戏是我们能实现而又不乏趣味呢?经过反复思考、讨论,我们小组设计了 “黄金矿工”这样一个小游戏:玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。1. 单机键盘上的空格键进入游戏,金块的总数是20,钻石的总数是 2,炸弹的总数是 3,石头的总数是4,大小位置是随机的。2. 在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子等一一抓到一个金子金子加20分,钻石加50分

4、且拉回速度变快,石头加 5分且拉回速度变慢,抓到炸弹不加分且炸弹 会爆炸。此时矿工是向下摇动转轴。获取到金子等往回拉后,矿工是不断转动转轴,直到金子拉 动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。如果钩子 没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。3 .加入计分和计时系统。60秒倒计时时间内抓取的金子越多得分越高。接下来,我们开始思索,要如何实现这些功能,如何将所有功能连接在一起。于是我们先用 fun code熟悉小游戏制作的操作,认真按照老师给我们的实验指南进行练习,反复阅读其内容, 并用vc6.0进行对各种小游戏源代码的简单探索。

5、当然,由于技术原因,我们想要设计的软件只 是局限于对游戏功能的实现,而实际中正式的欢迎界面,游戏说明等优美的图片,我们并没有进 行设计,包括刚开始拟定的金子运动、玩家升级等也取消了。然而,这并不影响我们制作小游戏 的热情,而且我们根据其具体的功能进行了组员之间的分工合作。二、功能需求I .程序大体流程图:空格键开始游戏金子、钻石、石头、炸弹随机分布; 钩子摇摆;计时器倒计时60秒计分器显示为0分钻石石头or计分器加50分否是计分器加5分; 拉升速度减缓钩子停止抓取;计时器减为0炸弹计分器加0分炸弹爆炸游戏结束按回车键,所有 数据清零,回到 初始状态图1.游戏模块图n.部分函数介绍本实验用到的A

6、PIexter n floatdGetScree nLeft();/*获取世界边界之左边X坐标*/exter n floatdGetScree nTop();/*获取世界边界之上边Y坐标*/exter n floatdGetScree nRight();/*获取世界边界之右边X坐标*/exter n floatdGetScree nBottom();/*获取世界边界之下边Y坐标*/extern void dSetSpriteWidth( const char *szName, const float fWidth );/* 设置精灵外形宽度 */extern float dGetSpriteW

7、idth( const char *szName ); /*dGetSpriteWidth :获取精灵外形宽度 */extern int dRa ndomRa nge( con st int iMi n, con st i nt iMax ); /* 获取一个位于参数1 到参数 2 之间的随机数 */exter n void dSetSpriteRotatio n( const char *szName, const float fRot ); /* 设置精灵的旋转角度 */exter n void dSetSpriteL in earVelocityPolar( const char *sz

8、Name, const float fSpeed, const float fPolar );/*设置精灵移动速度*/exter n int dAni mateSpritePlayA ni mati on( const char *szName, const char *szA nim, const in t iRestore );/*精灵播放动画*/exter n float dGetSpriteL in kPo in tPosX( const char *szName, const int ild );/*获取精灵链接点X坐标。链接点是依附于精灵的一个坐标点*/exter n float

9、dGetSpriteL in kPo in tPosY( const char *szName, const in t ild );/ *获取精灵链接点 Y坐标。链接点是依附于精灵的一个坐标点*/exter n void dDrawL ine( const float fStartX, const float fStartY , const float fEn dX, const float fEndY , const float fLin eWidth, const in t iLayer, const int iRed, const int iGree n, const in t iBlu

10、e, const int iAlpha );/*dDrawLine :两点之间画线*/Fun code接口介绍exter n void dOn SpriteColSprite( const char *szSrcName, const char *szTarName );/*精灵与精灵碰撞后将被调用的函数*/exter n intdSpriteM oun tToSpriteL in kPo int( const char *szSrcName, const char *szDstName, con st i nt iPo in tId );/*将一个精灵绑定到另一个精灵上,绑定位置为指定*的链

11、接点,暂时的成为另一个精灵的一部分,跟随其运动等*/extern float dGetSpritePositionX( const char *szName ); /*获取精灵 X 坐标 */extern float dGetSpritePositionY( const char *szName ); /*获取精灵 Y 坐标 */fun code 函数(1) /*主函数入口 */int PASCAL WinM ai n( HINSTANCE hln sta nee,HINSTANCE hPrevI nsta nee,LPSTRIpCmdLi ne,intn CmdShow)/*初始化游戏引擎*

12、/if( !dl nitGameE ngine( hln sta nee, IpCmdL ine )return 0;/*在此使用API更改窗口标题*/dSetWi ndowTitle(Lesso n);/*引擎主循环,处理屏幕图像刷新等工作*/while( dEngin eMa in Loop()/*获取两次调用之间的时间差,传递给游戏逻辑处理*/float fTimeDelta = dGetTimeDeIta();/*执行游戏主循环*/GameMai nLoop( fTimeDelta );;/*关闭游戏引擎*/dShutdow nGameE ngin e();return 0;(2) /

13、*引擎捕捉键盘按下消息后,将调用到本函数*/void dOn KeyDow n( const int iKey, con st i nt iAltPress, const int iShiftPress, con st i nt iCtrlPress )(3) /*引擎捕捉键盘弹起消息后,将调用到本函数*/void dOn KeyUp( const int iKey )(4) /*引擎捕捉到精灵与精灵碰撞之后,调用此函数*/void dOn SpriteColSprite( const char *szSrcName, const char *szTarName )(5) /*引擎捕捉到精灵与

14、世界边界碰撞之后,调用此函数 */void dOn SpriteColWorldLimit( con st char *szName, con st i nt iColSide )其它函数(1) 出现金块、钻石、炸弹、石头,并增加其碰撞属性void Appear。;(2) 画出链接钩子的线void lin e();(3) 重置游戏初始状态void begi n();(4) 游戏结束后,清楚剩余金块、钻石、炸弹、石头void Disappear。;三、总体设计I. 下图为主函数及各级嵌套函数的流程图,部分省略F*gGameState=0游戏初始界面;初始化游戏按空格键主函数入口In tPASCA

15、L WinMain()设置游戏窗口名字dSetWi ndowTitle(Lesso n)引擎主循环dEngin eMa in Loop()gGameState=2执行游戏主循环GameMain Loop()g_iGameState=1执行dOn KeyDow n函数调用 Appear()生成金子等; 钩子自由摆 动;按下调用dOnKeyDown ,钩子运动;调用gGameState=3时间到 游戏结束车 键安口g_iGameState=4dOn Sprite -ColSprite dOn Sprite- ColWorldLimit 实现抓取精灵消失所有数据重置回到初始状态图2.主函数流程图II

16、、操作使用说明玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。1. 单机键盘上的空格键进入游戏,金块的总数是20,钻石的总数是2,炸弹的总数是3,石头的总数是4,大小位置是随机的。2. 在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子等一一抓到一个金子金子加20分,钻石加50分且拉回速度变慢,石头加 5分且拉回速度变慢,抓到炸弹不加分且炸弹会爆炸。此 时矿工是向下摇动转轴。获取到金子等往回拉后,矿工是不断转动转轴,知道金子拉动到钩子初始处, 矿工恢复静止,钩子继续左右摇摆,直到玩家再次

17、单击向下方向键。如果钩子没有碰触到金子,而是 碰触到左右和下的边界,则钩子保持原来的速度往回收。3 .存在计分和计时系统。60秒倒计时时间内抓取的金子越多得分越高。四、详细设计1.变量定义部分变量定义是一个完整的程序中不可或缺的内容。在本次游戏编写中,我们根据程序需要,也不可缺少的设置了许多变量,下面我们简单介绍一下全局变量和主函数之中的部分变量:(1)定义全局变量/ 初始化物品数量 /in t g_iGoldCou nt=20;金子数量int gBombCou nt=3;炸弹数量int g_iDiaCou nt =2;/ 钻石数量int gSto neCou nt=4;/ 石头数量/ 初始化

18、计时计分 /float g_iGameScore = 0;/ 初始化得分float g_fGameTime = 60.f;计时,设定初始计时bool g_bStart =0;/计时,定义开始计时的状态/ 设置钩子自由旋转的定义 /float g_fHookRotation = 0.f;in t g_iGameState = 0;定义游戏初始状态float g_fEmptyHookSpeed = 15.f; 定义钩子的速度/ 设置钩子抓精灵的定义/float g_fHookStartPosX; /存储钩子的初始X位置float g_fHookStartPosY; /存储钩子的初始Y位置char

19、szGotGoldName20 ;/当前抓到金子的名称char szGotBombName3 ;/当前抓到炸弹的名称char szGotDiaName2 ;/当前抓钻石的名称char szGotSt on eName2;/当前抓石头的名称(2 )主函数之中的局部变量/ 设置钩子摇摆 /con st floatfRotateSpeed = 45.f;/ 摇摆速度,单位度 /秒int iHookRotToLeft = 1;/钩子摆动的方向:1 ; 0/ 设置钩子抓金子 /g_fHookStartPosX = dGetSpritePositionX(goldhook);获取钩子的初始 X 坐标g_f

20、HookStartPosY = dGetSpritePositionY(goldhook);获取钩子的初始 Y 坐标dSetSpriteWorldLimitMode(goldhook, WORLD_LIMIT_NULL);/ 初始化钩子与世界边界碰撞的模式为NULL2. 主函数模块Win Ma in ()函数模块实现初始化游戏引擎,执行引擎主循环,处理屏幕图像刷新等工作,包括获取两次调用之间的时间差,传递给游戏逻辑处理等。我们通过主函数实现设置初始化游戏状态、 钩子摇摆、钩子抓金子、炸弹、石头、钻石等内容。在本游戏中我们设计了5种游戏状态,分别为g_iGameState等于0、1、2、3、4。

21、其中,状态0为游戏初始状态,状态1和2为游戏运行状态,状态3为游戏结束状态,状态4为过渡到初始状态时运用的一个调整状态。步骤详细介绍:第一步,游戏初始化,显示初始界面需要的精灵if( !dInitGameEngine( hInstanee, IpCmdLine ) )/ 初始化游戏引擎return 0;dSetWindowTitle(”黄金矿工);/设置窗口名字dSetWi ndowTitle(Lesso n);begin();/调用函数,初始游戏,显示初始精灵第二步,游戏是一直进行的,因此游戏的重点是在while循环中。While循环中使用“floatfTimeDelta = dGetTim

22、eDelta();获取两次调用之间的时间差,传递给游戏逻辑处理,达到不断循环。下面介绍一下此循环中使用的语句。 游戏倒计时,倒计时结束后实现状态跳转到结束状态/ 倒计时 /if(g_bStart)判断游戏是否开始g_fGameTime -= EmeDelta;/ 设置游戏时间if(g_fGameTime 0)/判断游戏是否结束dSetTextValue(Time, (int)(g_fGameTime);/设置精灵”时间显示数值if(g_fGameTime= 180.f )g_fHookRotati oniHookRotToLeft=180.f;0;elseg_fHookRotati on-=

23、fThisRotate;if( g_fHookRotation = O.f )g_fHookRotati on= O.f;iHookRotToLeft =1;dSetSpriteRotatio n(goldhook,g_fHookRotatio n);/设置钩子的旋转角度 钩子抓金子,钩子抓金子为状态2,不需要钩子自由摆动/钩子抓金子 /if(gGameState = 2)float fSpeedX =dGetSpriteLinearVelocityX(goldhook);获取钩子 X 方向的速度float fSpeedY =dGetSpriteLinearVelocityY(goldhook

24、);获取钩子 Y 方向的速度if( fSpeedX -0.00001f & fSpeedY -0.00001f )/当速度接近为0时,即可判定其已到达初始点dSpriteDismou nt(szGotGoldName);/ 解除金块与钩子的锚定dDeleteSprite(szGotGoldName);/ 删除获取的金块g_iGameState = 1;回拉结束,设定状态为1,钩子摆动dAni mateSpritePlayA nimatio n(GoldMa n,GolderMa nAni matio n2, 0 );播放矿工的动画,即准备拉金子的动画 游戏状态3,显示游戏时间停止if(g_iG

25、ameState=3)dSetSpriteVisible( over,1);若结束显示 Time over 游戏状态为4时,实现过渡到游戏状态为1if(gGameState = 4)begi n();/调用重置游戏初始化所需精灵gGameState = 0 ;/实现游戏状态跳转到初始状态0g_iGameScore = 0;/重置游戏分数为0g_fGameTime = 60.f;/重置倒计时时间为 60g_bStart=0;/停止先前状态中的倒计时dSetTextValue(score,(i nt)0);/重置游戏分数为0dSetTextValue(time,(i nt)60);/重置倒计时时间

26、为 60dSetSpriteVisible(over,0);/ 隐藏 TimeoverdSetSpriteVisible(score,1);出现计分装置dSetSpriteVisible(time,1);/出现计时装置 由于钩子的连线也是一直在游戏运行时存在的,故也应放入此循环中/设置与钩子链接的线 /lin e();调用画线的函数第四步,游戏结束,关闭游戏引擎,主函数完成dShutdownGameEngine();/ 关闭游戏引擎return 0;3. 有关系统给定的函数的设置(1)dOnKeyDown()函数的详述,对于系统内我们主要使用此函数。我们使用空格键控制游戏开始,方向下键控制钩子

27、下落,回车键实现从结束状态到开始状态的过渡。/按下空格游戏开始/g_fEmptyHookSpeed=15.f;为之后调整绳子速度做准备if(iKey=KEY_SPACE &rgGameState = 0)/按下空格键且游戏状态为0时gGameState = 1;/游戏状态变为1dSetSpriteVisible( GameBegi n,0);/ 消失游戏开始dSetSpriteVisible( HJKG,O);/消失“黄金矿工”Appear();调用函数出现金子等东西g_bStart=1;/计时开始的条件/按下下键钩子下降 /if( iKey=KEY_DOWN &gGameState = 1)

28、/按下下键且游戏状态为1时 g_iGameState = 2;/置游戏状态为2,可用于控制钩子是否摆动dSetSpriteLi nearVelocityPolar(goldhook,g_fEmptyHookSpeed, g_fHookRotatio n);/以当前朝向给钩子一个向前的速度dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation1, 0);/播放挖金者的动作(一个胳膊往下压的动作),0表示播放一次,这里胳膊下压 就是一次/按下回车键跳转到初始状态/if( iKey=KEY_ENTER & g_iGameState = 3 )/

29、按下回车键且游戏状态为3 DisAppear();/调用函数消除金子等东西gGameState = 4;/游戏状态变为 4(2)dOnSpriteColSprite()函数是引擎捕捉到精灵与精灵碰撞之后被调用的,这个函数也是我们本次编程中的重点函数,用于钩子碰到金子等东西之时,同时增加积分系统于此函数之中,每当碰撞发生,对于不同的东西产生不同的加分,其中金子加20分,钻石加50分,石头加5分,炸弹不加分。并且调整了抓石头是与抓其他物品时的速度不同,还未炸弹消失过程中附加了粒子效应。以下是函数详述:void dOn SpriteColSprite( const char *szSrcName,

30、const char *szTarName )/发起者为 goldhook,接受者含有 GoldBlock 字段 /if(strcmp(szSrcName,goldhook)= 0 & strstr(szTarName,GoldBlock)!=NULL )if (dGetSpritelsMou nted(szTarName)=O)g_iGameScore+=20;dSpriteMou ntToSpriteLi nkPoi nt( szTarName, goldhook, 2 );/ 将金块锚定在钩子上dSpriteMoveTo(goldhook,g_fHookStartPosX, g_fHoo

31、kStartPosY , g_fEmptyHookSpeed, 1);使钩子向初始位置移动,即会拉dAni mateSpritePlayA nimatio n(GoldMa n,GolderMa nAni matio n3, 1 );播放拉金块的动作strcpy(szGotGoldName,szTarName);/复制并保存当前抓取到金块的名称g_fEmptyHookSpeed = 15.f;g_iGameState = 2;/表示绳索回拉2表示回拉状态,用于控制金块的回拉和删除/发起者为 goldhook,接受者含有 DiaBlock 字段 /if(strcmp(szSrcName,gold

32、hook)= 0 & strstr(szTarName,DiaBlock)!=NULL ) if (dGetSpritelsMou nted(szTarName)=0)g_iGameScore+=50;dSpriteMou ntToSpriteLi nkPoi nt( szTarName, goldhook, 2 );/ 将钻石锚定在钩子上dSpriteMoveTo(goldhook,g_fHookStartPosX, g_fHookStartPosY , g_fEmptyHookSpeed, 1);使钩子向初始位置移动,即会拉dAni mateSpritePlayA nimatio n(Go

33、ldMa n,GolderMa nAni matio n3, 1 );播放拉钻石的动作strcpy(szGotGoldName,szTarName);复制并保存当前抓取到钻石的名称g_fEmptyHookSpeed = 25.f;提高拉钻石速度g_iGameState = 2;/表示绳索回拉/2表示回拉状态,用于控制金块的回拉和删除/发起者为 goldhook,接受者含有 BombBlock 字段 /if(strcmp(szSrcName,goldhook)= 0 & strstr(szTarName,BombBlock)!=NULL ) dDeleteSprite(szGotBombName

34、);/ 炸弹消失float hPosX=dGetSpritePositio nX(goldhook);float hPosY=dGetSpritePositio nY(goldhook);dPlayEffect(bigbang, 2.f, hPosX, hPosY , 0.f );/跟随钩子增加粒子效应dSpriteMoveTo(goldhook,g_fHookStartPosX, g_fHookStartPosY , g_fEmptyHookSpeed, 1);使钩子向初始位置移动,即会拉dAni mateSpritePlayA nimatio n(GoldMa n,GolderMa nAn

35、i matio n3, 1 );播放拉炸弹的动作strcpy(szGotGoldName,szTarName);/复制并保存当前抓取到炸弹的名称g_fEmptyHookSpeed = 15.f;g_iGameState = 2;/表示绳索回拉/2表示回拉状态,用于控制金块的回拉和删除/发起者为 goldhook,接受者含有 StoneBlock 字段 /if(strcmp(szSrcName,goldhook)= 0 & strstr(szTarName,StoneBlock)!=NULL )if (dGetSpritelsMou nted(szTarName)=0)g_iGameScore+

36、=5;dSpriteMou ntToSpriteLi nkPoi nt( szTarName, goldhook, 2 );/ 将石头锚定在钩子上dSpriteMoveTo(goldhook,g_fHookStartPosX, g_fHookStartPosY , g_fEmptyHookSpeed, 1);使钩子向初始位置移动,即会拉dAni mateSpritePlayA nimatio n(GoldMa n,GolderMa nAni matio n3, 1 );播放拉钻石的动作strcpy(szGotGoldName,szTarName);/复制并保存当前抓取到石头的名称g_fEmpt

37、yHookSpeed = 5.f;/减缓拉石头的速度g_iGameState = 2;/表示绳索回拉/2表示回拉状态,用于控制金块的回拉和删除/ 计分 /dSetTextValue(score,gGameScore);5. dOn SpriteColWorldLimit()引擎捕捉到精灵与世界边界碰撞之后,调用此函数。此函数相对比较简单,用于处理钩子未抓到物品碰到世界边界时的处理。void dOn SpriteColWorldLimit( const char *szName, const in t iColSide )if(strcmp(szName,goldhook) = 0)dSprit

38、eMoveTo(szName,g_fHookStartPosX, g_fHookStartPosY , g_fEmptyHookSpeed, 1);/碰到边界的为钩子时dAni mateSpritePlayA nimatio n(GoldMa n,GolderMa nAni matio n3, 1 );同样设置为回拉,只是没有碰到金子gGameState = 2;4. 部分自己设置定义的函数(1 )定义金子、钻石、炸弹、石头显示的函数Appear(),其内还添加了少许碰撞属性。这也是我们组本次编程较突出的地方。void Appear()与显示金子有关的定义int g_fGoldBornMi n

39、X0;int g_fGoldBornMaxX =0;int g_fGoldBornMi nY =0;int g_fGoldBornMaxY =0;/与炸弹有关的定义int g_fBombBornMi nX0;int g_fBombBornMaxX0;int g_fBombBornMi nY0;int g_fBombBornMaxY0;/与钻石有关的定义int g_fDiaBornMi nX0;int g_fDiaBornMaxXint g_fDiaBornMi nYint g_fDiaBornMaxY0;0;0;0;=0;0;=0;/与石头有关的定义 int g_fSt on eBornMax

40、Xint g_fSto neBornMi nYint g_fSto neBornMaxY/设置金子 /g_fGoldBornMi nX=dGetScree nLeft() + 5;g_fGoldBornMaxX=dGetScree nRight() - 5;g_fGoldBornMi nY=dGetScree nTop() + 20;g_fGoldBornMaxY=dGetScree nBottom() - 5;int iLoop =0;int iSize= 4, iPosX = 0, iPosY = 0; dSetSpriteCollisio nSe nd(goldhook, 1); dSe

41、tSpriteCollisio nReceive(goldTemplate, 1);在WinMain的复制金子前给金块加上接受碰撞属性for( iLoop = 0; iLoop g_iGoldCo unt; iLoop+ )if( iLoop = 10 & iLoop 16 )iSize= 6;else/金子左边界/金子右边界/金子上边界/金子下边界/循环变量控制/iSize表示金块大小的变量钩子抓金子的定义/生成10个小金块,大小为4/生成6个中金块,大小为 6/生成4个大金块,大小为 8iSize= 8;初始化金子精灵实例char* tmpName; tmpName=dMakeSprite

42、Name(GoldBlock,iLoop); dClo neSprite(goldTemplate,tmpName); dSetSpriteWidth(tmpName,(float)iSize); dSetSpriteHeight(tmpName,(float)iSize);设置金子精灵位置/生成金块名字/设置金块的宽度/设置金块的高度iPosXdRa ndomRa nge(g_fGoldBornMi nX, g_fGoldBornMaxX);iPosYdRandomRange(g_fGoldBornMinY , g_fGoldBornMaxY);dSetSpritePositio n(tmp

43、Name,(float)iPosX, (float)iPosY);/设置炸弹 /g_fBombBornMi nXdGetScree nLeft() + 10;/炸弹左边界g_fBombBornMaxXdGetScreenRight() - 8;/炸弹右边界g_fBombBornMi nYdGetScree nTop() + 13;/炸弹上边界g_fBombBornMaxYdGetScree nBottom() - 10;/炸弹下边界int eLoop0;循环变量控制int eSize6, ePosX = 0, ePosY = 0;/eSize表示炸弹大小的变量dSetSpriteCollisi

44、o nSe nd(goldhook, 1);/钩子抓炸弹定义dSetSpriteCollisio nReceive(bombTemplate, 1);在WinMain的复制炸弹前给炸弹加上接受碰撞属性for( eLoop = 0; eLoop g_iBombCo unt; eLoop+ )if( eLoop 2)生成2个大炸弹,大小为8eSize8;else/生成1个小炸弹,大小为 6eSize =6;初始化炸弹精灵实例char* tmpName;/生成炸弹名字/设置炸弹的宽度/设置炸弹的高度tmpName=dMakeSpriteName(BombBlock,eLoop); dClo neSp

45、rite(bombTemplate,tmpName);dSetSpriteWidth(tmpName,(float)eSize); dSetSpriteHeight(tmpName,(float)eSize);设置炸弹精灵位置ePosX =dRa ndomRa nge(g_fBombBornMi nX, g_fBombBornMaxX);ePosY =dRa ndomRa nge(g_fBombBornMi nY, g_fBombBornMaxY);dSetSpritePositio n( tmpName,(float)ePosX, (float)ePosY);/ 设置钻石 / g_fDiaB

46、ornMi nX=dGetScreenLeft() + 16;/ 钻石左边界g_fDiaBornMaxX=dGetScreenRight() - 15;/ 钻石右边界g_fDiaBornMi nY=dGetScreenTop() + 20;钻石上边界g_fDiaBornMaxY=dGetScreenBottom() - 18;/ 钻石下边界int mLoop =0;/循环变量控制int mSize =4, mPosX = 10, mPosY = 20;/mSize 表示钻石大小的变量dSetSpriteCollisio nSe nd(goldhook, 1);钩子抓钻石定义dSetSpriteCollisio nReceive(diaTemplate, 1);在WinMain的复制钻石

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论