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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

黄金矿工实验报告.docx

1、黄金矿工实验报告“黄金矿工”实验报告中国石油大学(华东) 程序设计实训报告 “黄金矿工”实验报告 游戏截图 图一:开始游戏 图二:按下空格键开始游戏,出现金块,钩子转动 图三:按下?键,钩子停止转动,开始下放,抓取金块 图四:抓完金块后返回初始界面 功能描述 1、 游戏运行,初始界面出现“空格开始”的提示。 2、 玩家按下空格键,开始游戏。 3、 游戏开始后,界面随机出现20个大小不同的金子,并且钩子开始转动。 4、 按下?键,钩子停止转动,下放,抓取金子。 5、 抓到金子后,返回到初始位置,被抓到的金子消失。 6、 用户继续按下?键,继续抓取金子,直到金子被抓取完,这样一局游戏完成。 7、

2、一局游戏完成后,屏幕重新出现“空格开始”的标志,用户按下空格可以继续游戏,如此往复。 流程图: 数据结构: 1、g_fGoldBornMinX 金子左边界 2、 g_fGoldBornMaxX 金子右边界 3、 g_fGoldBornMinY 金子上边界 4、 g_fGoldBornMaxY 金子下边界 5、g_iGoldCount 屏幕中金子数目 6、 g_iGameState 设置游戏状态 7、szGotGoldName20 当前抓到金子的名称 8、g_fHookRotation 钩子的转动的角速度 9、 g_fEmptyHookSpeed 钩子的下放的初始速度 10、g_fHookSta

3、rtPosX 存储钩子的初始X位置 11、g_fHookStartPosY 存储钩子的初始Y位置 算法描述: 游戏状态g_iGameState分为三种状态0,1,2 ,其中0表示游戏结束状态,1表示游戏初始化,2则表示游戏运行状态; 0 , 1的转换为“空格开始”; 1 , 2的转换自然发生,即游戏初始化函数后会自动将游戏状态从1置为2; 2 表示游戏运行状态,在该状态,按下?键可以抓取金子; 2 , 0的转换为当金子全被抓完后会自动将游戏状态从2置为0; 金子精灵的初始化: 1、创建金子精灵的对象; 2、生成大小为4的小金块10个、 大小为6的中金块6个、大小为8的大金块4个,并保存tmpN

4、ame数组中,随机获取每个金子的坐标; 3、隐藏“空格开始”精灵; 4、设置屏幕中剩下的金子数目为20,每当被抓走的一块金子消失后屏幕中剩下的金子数目减1; 5、当屏幕中剩下的金子数目为0时,一局游戏结束,返回初始界面,“空格开始”精灵出现; 6、重新进行金子精灵的初始化; dOnKeyDown(const intiKey, const boolbAltPress, const boolbShiftPress, const boolbCtrlPress ) 游戏开始和控制按钮: 1、游戏还未开始,即游戏状态为0,如果空格按被下,则将游戏状态改为1,此时对程序的数据进行初始化,“空格开始”精灵消

5、失,金子出现,钩子转动; 2、游戏状态为0时并按下空格键后,如果按下?键,钩子开始下放抓金子,当抓到金子后,游戏的状态变为2游戏正式开始运行; 3、游戏状态为2时,钩子抓住金子后,按照金子的大小设置金子的速度,金子越大,回拉速度越小; 4、当钩子和金子回到初始位置后,被抓的金子消失; 源代码: 在Main.cpp文件中 /- / /- #include CommonAPI.h #include stdio.h #include string.h void DrawHookLine(); int g_fGoldBornMinX = 0; int g_fGoldBornMaxX = 0; int

6、g_fGoldBornMinY = 0; int g_fGoldBornMaxY = 0; int g_iGoldCount = 20; int g_iGameState=2; int flag=1; int flagnum=0; char szGotGoldName20 ; /当前抓到金子的名称 float g_fHookRotation = 0.f; float g_fEmptyHookSpeed =35.f; float fTimeDelta; float g_fHookStartPosX; /存储钩子的初始X位置 float g_fHookStartPosY; /存储钩子的初始Y位置

7、/ / / 主函数入口 / / int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) / 初始化游戏引擎 if( !dInitGameEngine( hInstance, lpCmdLine ) ) return 0; / 游戏初始化代码 dSetWindowTitle(黄金矿工); g_fGoldBornMinX = dGetScreenLeft() + 5; /金子左边界 g_fGoldBornMaxX = dGetScreenRight() - 5;

8、/金子右边界 g_fGoldBornMinY = dGetScreenTop() + 20; /金子上边界 g_fGoldBornMaxY = dGetScreenBottom() - 5; /金子下边界 g_fHookStartPosX = dGetSpritePositionX(GoldHook); /获取钩子的初始X坐标 g_fHookStartPosY = dGetSpritePositionY(GoldHook); /获取钩子的初始Y坐标 dSetSpriteCollisionSend(goldHook, 1); dSetSpriteCollisionReceive(goldTemp

9、late, 1); const float fRotateSpeed = 45.f; / 摇摆速度,单位 度/秒 int iHookRotToLeft = 1; /钩子摆动的方向:1 ? ;0 ? float fTimeDelta = dGetTimeDelta(); / 引擎主循环,处理屏幕图像刷新等工作 while( dEngineMainLoop() ) / 获取两次调用之间的时间差,传递给游戏逻辑处理 float fTimeDelta = dGetTimeDelta(); DrawHookLine(); / 执行游戏主循环 if(g_iGameState = 0) float fThi

10、sRotate = fRotateSpeed * fTimeDelta; if( iHookRotToLeft ) g_fHookRotation += fThisRotate; if( g_fHookRotation = 180.f ) g_fHookRotation = 180.f; iHookRotToLeft = 0; else g_fHookRotation -= fThisRotate; if( g_fHookRotation = 0.f ) g_fHookRotation = 0.f; iHookRotToLeft = 1; dSetSpriteRotation(GoldHook

11、,g_fHookRotation); else if(g_iGameState = 1) dAnimateSpritePlayAnimation(goldMan,GolderManAnimation3, 1 ); /播放拉金块的动作 /获取钩子X方向的速度 float fSpeedX = dGetSpriteLinearVelocityX(GoldHook); /获取钩子Y方向的速度 float fSpeedY = dGetSpriteLinearVelocityY(GoldHook); /当速度接近为0时,即可判定其已到达初始点 if( fSpeedX -0.00001f & fSpeedY

12、 -0.00001f ) /解除金块与钩子的锚定 dSpriteDismount(szGotGoldName); /删除获取的金块 dDeleteSprite(szGotGoldName); /回拉结束,设定状态为0 g_iGameState = 0; /播放矿工的动画,即准备拉金子的动画 if(flagnum) g_iGoldCount-; / 播放挖金者的动作(恢复初始守候动作) dAnimateSpritePlayAnimation(goldMan, GolderManAnimation2, 1); if(g_iGoldCount=0) g_iGameState = 0; dSetSpr

13、iteVisible(GameBegin,1); g_iGoldCount = 20; flag=1; ; dAnimateSpritePlayAnimation(goldMan, GolderManAnimation2, 1); / 关闭游戏引擎 dShutdownGameEngine(); return 0; /= / / 引擎捕捉鼠标移动消息后,将调用到本函数 void dOnMouseMove( const float fMouseX, const float fMouseY ) / 可以在此添加游戏需要的响应函数 /= / / 引擎捕捉鼠标点击消息后,将调用到本函数 void dOn

14、MouseClick( const int iMouseType, const float fMouseX, const float fMouseY ) / 可以在此添加游戏需要的响应函数 /= / / 引擎捕捉键盘按下消息后,将调用到本函数 / iAltPress iShiftPress iCtrlPress 分别为判断Shift,Alt,Ctrl当前是否也处于按下状态。比如可以判断Ctrl+E组合键 void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPres

15、s ) / 可以在此添加游戏需要的响应函数 if(iKey=KEY_SPACE) g_iGameState = 1; / 初始化之后,将游戏状态设置为进行中 dSetSpriteVisible(GameBegin,0); /生成金子 int iLoop = 0; /循环变量控制 int iSize = 4, iPosX = 0, iPosY = 0; /iSize表示金块大小的变量 if(flag) for( iLoop = 0; iLoop g_iGoldCount; iLoop+ ) if( iLoop = 10 & iLoop 16 )/生成6个中金块,大小为6 iSize = 6; e

16、lse/生成4个大金块,大小为8 iSize = 8; /初始化金子精灵实例 char* tmpName; tmpName=dMakeSpriteName(GoldBlock,iLoop); /生成金块名字 dCloneSprite(goldTemplate,tmpName); dSetSpriteWidth(tmpName,(float)iSize); /设置金块的宽度 dSetSpriteHeight(tmpName,(float)iSize); /设置金块的高度 /设置金子精灵位置 iPosX = dRandomRange(g_fGoldBornMinX, g_fGoldBornMaxX

17、); iPosY = dRandomRange(g_fGoldBornMinY, g_fGoldBornMaxY); dSetSpritePosition(tmpName,(float)iPosX, (float)iPosY); flag=0; if(g_iGoldCount=0) flag=1; g_iGoldCount=20; if( iKey = KEY_DOWN &g_iGameState =0 ) /按下?并且游戏状态为 0 g_iGameState = 2; /置游戏状态为2,可用于控制钩子是否摆动 / 以当前朝向给钩子一个向前的速度 dSetSpriteLinearVelocit

18、yPolar(GoldHook,g_fEmptyHookSpeed, g_fHookRotation); / 播放挖金者的动作(一个胳膊往下压的动作) dAnimateSpritePlayAnimation(goldMan,GolderManAnimation1, 0); /0 表示播放一次,这里胳膊往下压就是一次 /= / / 引擎捕捉键盘弹起消息后,将调用到本函数 void dOnKeyUp( const int iKey ) / 可以在此添加游戏需要的响应函数 /= / / 引擎捕捉到精灵与精灵碰撞之后,调用此函数 void dOnSpriteColSprite( const char

19、*szSrcName, const char *szTarName ) / 发起者为GoldHook,接受者含有GoldBlock字段 if(strcmp(szSrcName,GoldHook)= 1 & strstr(szTarName,GoldBlock)!=NULL ) dSpriteMountToSpriteLinkPoint( szTarName, GoldHook, 2 );/将金块锚定在钩子上 dSpriteMoveTo(GoldHook,g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1); /使钩子向初始位置移动,

20、即会拉 strcpy(szGotGoldName,szTarName); /复制并保存当前抓取到金块的名称 / 发起者为GoldHook,接受者含有GoldBlock字段 / 根据金子大小,计算钩子的往回收的速度,越大的越慢。 / 算法:之前设置的金子大小为4,6,8,用10减去该大小再除以10,得到3个小/ 数:0.6,0.4,0.2.该小数乘以空钩子的速度即得到挂接不同金子后的实际速度 float fWidth = dGetSpriteWidth( szTarName ); float fSpeed = (10.f - fWidth) / 10.f) * g_fEmptyHookSpeed

21、; / 钩子往初始位置移动 dSpriteMoveTo( goldhook, g_fHookStartPosX, g_fHookStartPosY, fSpeed, 1); dAnimateSpritePlayAnimation(goldMan,GolderManAnimation1, 0 );/播放拉金块的动作 g_iGameState = 1; flagnum=1; /= / / 引擎捕捉到精灵与世界边界碰撞之后,调用此函数. / iColSide : 0 左边,1 右边,2 上边,3 下边 void dOnSpriteColWorldLimit( const char *szName,

22、const int iColSide ) if(strcmp(szName,GoldHook)!=0) /碰到边界的为钩子时 dSpriteMoveTo(szName,g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1); dAnimateSpritePlayAnimation(goldMan,GolderManAnimation3, 0); /播放拉金块的动作 /同样设置为回拉,只是没有碰到金子 g_iGameState = 1; flagnum=0; void DrawHookLine() / 首先,从矿工精灵上获取一个缆绳链接

23、点作为绳子的起始点(该链接点在编 / 辑器里编辑好) float fStartX = dGetSpriteLinkPointPosX( GoldMan, 1 ); float fStartY = dGetSpriteLinkPointPosY( GoldMan, 1 ); / 绳子终点在钩子精灵上获取(该链接点在编辑器里编辑好) float fEndX = dGetSpriteLinkPointPosX( GoldHook, 1 ); float fEndY = dGetSpriteLinkPointPosY( GoldHook, 1 ); / 在这两点之间划线.线的颜色红绿蓝值都为50,即灰

24、色 dDrawLine( fStartX, fStartY, fEndX, fEndY, 2.f, 0, 50, 50, 50, 255 ); 8、 游戏运行,初试界面出现空格开始的提示。学号 姓名 任务 成绩 解决程序结构布局问题; 解决画线函数问题; 写实验报告; 解决捕捉到精灵与精灵碰撞问题; 解决捕捉到精灵与世界边界碰撞问题; 解决捕捉键盘按下消息问题; 同一个问题可以用不同的代码解决,如该程序中的画线部分; 部分程序代码在程序中不能实现,可能是该软件的bug; 编程过程中加深了对全局变量和局部变量的了解; 要理解函数的意义,不然会弄乱; 程序要写清晰明快,不然在检查的时候会很麻烦; 随着对该软件的理解,对C语言中的结构函数有了更深的了解; 评阅教师签名

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

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