ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:2.36MB ,
资源ID:7399883      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7399883.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(小游戏黄金矿工设计报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

小游戏黄金矿工设计报告.docx

1、小游戏黄金矿工设计报告C语言课程设计报告机房名称 时 间 学 院 专业班级 姓 名 学 号 指导教师 小游戏“黄金矿工”设计报告一、课题简述通过一年的c语言程序设计的学习,我们仅仅掌握了c语言最基本的知识,还有很多内容是我们没有涉及的。所以通过c语言课程设计的学习实践活动和实际演练,使我们能够在实际操作中提高运用c语言解决问题的能力和程序设计的能力。得知本次课程设计任务是小游戏的设计,我们既兴奋又不安,兴奋是十分期待自己亲手做出的游戏,不安的是我们对funcode这个软件很不了解。幸好这次实践的过程,让我们从做平时简单的小程序过渡到现在的综合应用程序,将学过的c语言知识融入新接触到的funco

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

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

4、单探索。当然,由于技术原因,我们想要设计的软件只是局限于对游戏功能的实现,而实际中正式的欢迎界面,游戏说明等优美的图片,我们并没有进行设计,包括刚开始拟定的金子运动、玩家升级等也取消了。然而,这并不影响我们制作小游戏的热情,而且我们根据其具体的功能进行了组员之间的分工合作。二、功能需求.程序大体流程图:图1. 游戏模块图.部分函数介绍本实验用到的APIextern float dGetScreenLeft(); /*获取世界边界之左边X坐标*/extern float dGetScreenTop(); /*获取世界边界之上边Y坐标*/extern float dGetScreenRight()

5、; /*获取世界边界之右边X坐标*/extern float dGetScreenBottom(); /*获取世界边界之下边Y坐标*/extern void dSetSpriteWidth( const char *szName, const float fWidth ); /*设置精灵外形宽度*/extern float dGetSpriteWidth( const char *szName ); /*dGetSpriteWidth:获取精灵外形宽度*/extern int dRandomRange( const int iMin, const int iMax ); /*获取一个位于参数1

6、到参数2之间的随机数*/extern void dSetSpriteRotation( const char *szName, const float fRot ); /*设置精灵的旋转角度*/extern void dSetSpriteLinearVelocityPolar( const char *szName, const float fSpeed, const float fPolar ); /*设置精灵移动速度*/extern int dAnimateSpritePlayAnimation( const char *szName, const char *szAnim, const

7、int iRestore ); /*精灵播放动画*/extern float dGetSpriteLinkPointPosX( const char *szName, const int iId ); /*获取精灵链接点X坐标。链接点是依附于精灵的一个坐标点*/extern float dGetSpriteLinkPointPosY( const char *szName, const int iId ); / *获取精灵链接点Y坐标。链接点是依附于精灵的一个坐标点*/extern void dDrawLine( const float fStartX, const float fStartY

8、, const float fEndX, const float fEndY, const float fLineWidth, const int iLayer, const int iRed, const int iGreen, const int iBlue, const int iAlpha );/* dDrawLine:两点之间画线*/Funcode接口介绍extern void dOnSpriteColSprite( const char *szSrcName, const char *szTarName ); /*精灵与精灵碰撞后将被调用的函数*/extern int dSprit

9、eMountToSpriteLinkPoint( const char *szSrcName, const char *szDstName, const int iPointId ); /*将一个精灵绑定到另一个精灵上,绑定位置为指定* 的链接点,暂时的成为另一个精灵的一部分,跟随其运动等*/extern float dGetSpritePositionX( const char *szName ); /*获取精灵X坐标*/extern float dGetSpritePositionY( const char *szName ); /*获取精灵Y坐标*/funcode函数(1)/*主函数入口

10、*/int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) /*初始化游戏引擎*/ if( !dInitGameEngine( hInstance, lpCmdLine ) ) return 0; /*在此使用API更改窗口标题*/ dSetWindowTitle(Lesson); /*引擎主循环,处理屏幕图像刷新等工作*/ while( dEngineMainLoop() ) /*获取两次调用之间的时间差,传递给游戏逻辑处理*/ float fTimeDel

11、ta = dGetTimeDelta(); /*执行游戏主循环*/ GameMainLoop( fTimeDelta ); ; /*关闭游戏引擎*/ dShutdownGameEngine(); return 0;(2)/*引擎捕捉键盘按下消息后,将调用到本函数*/void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress )(3)/*引擎捕捉键盘弹起消息后,将调用到本函数*/void dOnKeyUp( const int iKey )(4)/*引擎捕捉到精

12、灵与精灵碰撞之后,调用此函数*/void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )(5)/* 引擎捕捉到精灵与世界边界碰撞之后,调用此函数. */void dOnSpriteColWorldLimit( const char *szName, const int iColSide )其它函数(1) 出现金块、钻石、炸弹、石头,并增加其碰撞属性void Appear();(2) 画出链接钩子的线void line();(3) 重置游戏初始状态void begin();(4) 游戏结束后,清楚剩余金块、钻石

13、、炸弹、石头void Disappear();三、总体设计.下图为主函数及各级嵌套函数的流程图,部分省略。图 2.主函数流程图 、操作使用说明玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。1.单机键盘上的空格键进入游戏,金块的总数是20,钻石的总数是2,炸弹的总数是3,石头的总数是4,大小位置是随机的。2.在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子等抓到一个金子金子加20分,钻石加50分且拉回速度变慢,石头加5分且拉回速度变慢,抓到炸弹不加分且炸弹会爆炸。此时矿工是向下摇动转轴

14、。获取到金子等往回拉后,矿工是不断转动转轴,知道金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。3存在计分和计时系统。60秒倒计时时间内抓取的金子越多得分越高。四、详细设计1.变量定义部分变量定义是一个完整的程序中不可或缺的内容。在本次游戏编写中,我们根据程序需要,也不可缺少的设置了许多变量,下面我们简单介绍一下全局变量和主函数之中的部分变量:(1)定义全局变量/初始化物品数量/int g_iGoldCount=20; /金子数量int g_iBombCount=3; /炸弹数量in

15、t g_iDiaCount =2; /钻石数量int g_iStoneCount=4; /石头数量/初始化计时计分/float g_iGameScore = 0; /初始化得分float g_fGameTime = 60.f; /计时,设定初始计时 bool g_bStart = 0; /计时,定义开始计时的状态 /设置钩子自由旋转的定义/float g_fHookRotation = 0.f;int g_iGameState = 0; /定义游戏初始状态float g_fEmptyHookSpeed = 15.f;/定义钩子的速度/设置钩子抓精灵的定义/float g_fHookStartP

16、osX; /存储钩子的初始X位置float g_fHookStartPosY; /存储钩子的初始Y位置char szGotGoldName20 ; /当前抓到金子的名称 char szGotBombName3 ; /当前抓到炸弹的名称 char szGotDiaName2 ; /当前抓钻石的名称 char szGotStoneName2 ; /当前抓石头的名称 (2)主函数之中的局部变量/设置钩子摇摆/const float fRotateSpeed = 45.f; / 摇摆速度,单位 度/秒int iHookRotToLeft = 1; /钩子摆动的方向:1 ;0 /设置钩子抓金子/g_fH

17、ookStartPosX = dGetSpritePositionX(goldhook); /获取钩子的初始X坐标g_fHookStartPosY = dGetSpritePositionY(goldhook); /获取钩子的初始Y坐标 dSetSpriteWorldLimitMode(goldhook, WORLD_LIMIT_NULL); /初始化钩子与世界边界碰撞的模式为NULL2.主函数模块WinMain()函数模块实现初始化游戏引擎,执行引擎主循环,处理屏幕图像刷新等工作,包括获取两次调用之间的时间差,传递给游戏逻辑处理等。我们通过主函数实现设置初始化游戏状态、钩子摇摆、钩子抓金子、

18、炸弹、石头、钻石等内容。在本游戏中我们设计了5种游戏状态,分别为g_iGameState等于0、1、2、3、4。其中,状态0为游戏初始状态,状态1和2为游戏运行状态,状态3为游戏结束状态,状态4为过渡到初始状态时运用的一个调整状态。步骤详细介绍:第一步,游戏初始化,显示初始界面需要的精灵if( !dInitGameEngine( hInstance, lpCmdLine ) ) / 初始化游戏引擎return 0;dSetWindowTitle(黄金矿工); /设置窗口名字dSetWindowTitle(Lesson);begin(); /调用函数,初始游戏,显示初始精灵第二步,游戏是一直进行

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

20、 ) g_fHookRotation = 180.f; iHookRotToLeft = 0; else g_fHookRotation -= fThisRotate; if( g_fHookRotation = 0.f ) g_fHookRotation = 0.f; iHookRotToLeft = 1; dSetSpriteRotation(goldhook,g_fHookRotation); /设置钩子的旋转角度钩子抓金子,钩子抓金子为状态2,不需要钩子自由摆动/钩子抓金子/if(g_iGameState = 2)float fSpeedX = dGetSpriteLinearVelo

21、cityX(goldhook); /获取钩子X方向的速度float fSpeedY = dGetSpriteLinearVelocityY(goldhook); /获取钩子Y方向的速度if( fSpeedX -0.00001f & fSpeedY -0.00001f ) /当速度接近为0时,即可判定其已到达初始点dSpriteDismount(szGotGoldName); /解除金块与钩子的锚定dDeleteSprite(szGotGoldName); /删除获取的金块g_iGameState = 1; /回拉结束,设定状态为1,钩子摆动dAnimateSpritePlayAnimation

22、(GoldMan,GolderManAnimation2, 0 ); /播放矿工的动画,即准备拉金子的动画 游戏状态3,显示游戏时间停止if(g_iGameState=3) dSetSpriteVisible( over,1); /若结束显示Time over 游戏状态为4时,实现过渡到游戏状态为1if(g_iGameState = 4)begin(); /调用重置游戏初始化所需精灵g_iGameState = 0 ; /实现游戏状态跳转到初始状态0 g_iGameScore = 0; / 重置游戏分数为0g_fGameTime = 60.f; / 重置倒计时时间为60g_bStart=0;

23、/ 停止先前状态中的倒计时 dSetTextValue(score,(int)0); / 重置游戏分数为0dSetTextValue(time,(int)60); / 重置倒计时时间为60dSetSpriteVisible(over,0); /隐藏TimeoverdSetSpriteVisible(score,1); /出现计分装置 dSetSpriteVisible(time,1); /出现计时装置由于钩子的连线也是一直在游戏运行时存在的,故也应放入此循环中/设置与钩子链接的线/line(); /调用画线的函数第四步,游戏结束,关闭游戏引擎,主函数完成dShutdownGameEngine(

24、); / 关闭游戏引擎return 0;3.有关系统给定的函数的设置(1)dOnKeyDown()函数的详述,对于系统内我们主要使用此函数。我们使用空格键控制游戏开始,方向下键控制钩子下落,回车键实现从结束状态到开始状态的过渡。/按下空格游戏开始/g_fEmptyHookSpeed=15.f; /为之后调整绳子速度做准备if(iKey=KEY_SPACE & g_iGameState = 0) /按下空格键且游戏状态为0时 g_iGameState = 1; /游戏状态变为1 dSetSpriteVisible( GameBegin,0); /消失游戏开始 dSetSpriteVisible(

25、 HJKG,0); /消失“黄金矿工” Appear(); /调用函数出现金子等东西 g_bStart=1; /计时开始的条件/按下下键钩子下降/if( iKey=KEY_DOWN & g_iGameState = 1) /按下下键且游戏状态为1时 g_iGameState = 2; /置游戏状态为2,可用于控制钩子是否摆动 dSetSpriteLinearVelocityPolar(goldhook,g_fEmptyHookSpeed, g_fHookRotation); /以当前朝向给钩子一个向前的速度 dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation1, 0); / 播放挖金者的动作(一个胳膊往下压的动作) ,0 表示播放一次,这里胳膊下压就是一次/按下回车键跳转到初始状态/if( iKey=KEY_ENTER & g_iGameState = 3 ) /按下回车键且游戏状态为3 DisAppear(); /调用函数消除金子等东西 g_iGameState = 4; /游戏状态变为4(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1