版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计实训报告黄金矿工10一、系统界面图1 开始游戏图2,游戏进行时二、功能描述玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。要求如下:1. 游戏的初始界面如图1,单机键盘上的空格键进入游戏,进入后界面如图2,金块的总数是20,大小位置是随机的。2. 在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子,此时矿工是向下摇动转轴。获取到金子往回拉后,矿工是不断转动转轴,知道金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。3. 伸出的钩子如果碰触到金子,则
2、钩子和金子一起往回拉,回收的速度根据抓取到的金子的大小变化而变化,金子越大,回拉的速度越慢,反之亦然。如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。4. 抓取到的金子拉回到转轴处消失,此时金子数目减少一个。如果玩家将所有金子抓取完,游戏返回到如图1的初始界面。开始三、流程图伸出钩子显示金块使钩子旋转按空格隐藏判断金块是否与钩子碰撞金块与钩子碰撞拉回并删除金块 否 是如果抓取金子个数等于20钩子与边界碰撞并弹回四、数据结构(说明:主要写用到的各类型的全局变量、含义)1. g_iGameState表示游戏状态 ,初始状态g_iGameState=0.2. g_fHo
3、okStartPosX存储钩子的初始X位置。3. n 控制金块生成,初始化为1.4. g_fHookStartPosY存储钩子的初始X位置。5. szGotGoldName20 当前抓到金子的名称6. count抓取到金子的个数。7. iSize金子的尺寸。8. g_fHookRotation钩子与地面的夹角。9. g_iHookRotToLeft控制钩子转向,1从右向左 2从左向右。10. g_fGoldBornMinX, g_fGoldBornMaxX, g_fGoldBornMinY, g_fGoldBornMaxY分别代表左右上下的值。11. g_iGoldCount金子的个数,初始化
4、为20.12. g_fEmptyHookSpeed 钩子发出时速度。13. fRotateSpeed钩子旋转速度。五、算法描述游戏状态g_iGameState分为三种状态0,1,2 ,其中0表示游戏结束状态,1表示游戏初始化,2则表示游戏运行状态;键盘控制:1. 空格按下精灵隐藏2. 游戏有结束状态转为初始化状态3. 钩子开始转动,金块也显示出来4. 利用A,D键控制钩子左右摇摆或“”释放钩子5. 游戏自动进入运行状态钩子旋转:1. 利用fHookRotatio记录钩子的角度,flag控制钩子的旋转方向,fRotateSpeed控制钩子的摇摆速度2. 利用fThisRotate =fRotat
5、eSpeed * fTimeDelta和g_fHookRotation+= fThisRotate使钩子角度发生变化3. 利用A键使钩子角度向左增加30度(源代码g_fHookRotation+=30)利用D键使钩子角度向右增加30度(源代码g_fHookRotation-=30)4. 设置钩子旋转的角度范围01805. 使用dSetSpriteRotation函数控制钩子的位置金块显示:1. iSize标记金块尺寸,g_iGoldCount标记金块个数2. 使用名为dMakeSpriteName的数组储存金块3. 使用dCloneSprite复制金块4. 使用dSetSpriteWidth和
6、dSetSpriteHeight分别控制金块的宽度和高度5. 使用dSetSpritePosition函数设置金块位置绳子连接:使用dDrawLine函数将钩子与矿工用绳子连接起来并设置绳子的粗细和颜色精灵碰撞:调用dOnSpriteColSprite函数实现钩子与金块碰撞之后的连接拉回边界碰撞:调用dOnSpriteColWorldLimit函数实现钩子与边界碰撞之后的弹回六、源代码/-/-#include CommonAPI.hint g_iGameState=0;/游戏状态int n=1;/控制生成金子的循环int count=0;记录钩子抓取金子的数量int iSize=4;/金子的大
7、小int flag=1;/控制钩子是否旋转float g_fHookRotation = 0.f;/钩子与地面的夹角int g_iHookRotToLeft=1;/控制金子旋转方向int g_fHookRotatio=0;金子的角度int g_fGoldBornMinX=0;intg_fGoldBornMaxX=0;intg_fGoldBornMinY=0;intg_fGoldBornMaxY=0;/边界的值int g_iGoldCount= 20;/金子的数量float g_fEmptyHookSpeed= 30.f;/钩子的数量floatfRotateSpeed = 40.f; / 摇摆速
8、度,单位 度/秒int iHookRotToLeft = 1;/钩子摆动的方向:1 ;0 float g_fHookStartPosX;/存储钩子的初始X位置float g_fHookStartPosY;/存储钩子的初始Y位置char szGotGoldName20;/当前抓到金子的名称void GameInit(void)dSetSpriteVisible(GameBegin,0);/隐藏精灵if(n=1)intiLoop=0;/循环变量控制int iPosX = 0, iPosY = 0; /iSize表示金块大小的变量for( iLoop = 0; iLoop g_iGoldCount;
9、 iLoop+ )if( iLoop = 10 & iLoop = 180.f )/大于180,置为向右转,即0g_fHookRotation=180.f;iHookRotToLeft=0;else/向右转,度数不断变小g_fHookRotation-= fThisRotate;/小于0,置为向左转,即 1if( g_fHookRotation 0 )GameRun( fTimeDelta );else/ 游戏结束。调用游戏结数函数并把游戏状态修改为结束状态g_iGameState=0;GameEnd();break;/ 游戏结束/等待按空格键开始case 0:default:break;dS
10、etTextValue(score,count);/ 执行游戏主循环;/ 关闭游戏引擎dShutdownGameEngine();return 0;/=/ 引擎捕捉鼠标移动消息后,将调用到本函数void dOnMouseMove( const float fMouseX, const float fMouseY )/ 可以在此添加游戏需要的响应函数/=/ 引擎捕捉鼠标点击消息后,将调用到本函数void dOnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )/ 可以在此添加游戏需要的响应函数/
11、=/ 引擎捕捉键盘按下消息后,将调用到本函数/ iAltPress iShiftPress iCtrlPress 分别为判断Shift,Alt,Ctrl当前是否也处于按下状态。比如可以判断Ctrl+E组合键void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress )/ 可以在此添加游戏需要的响应函数if(iKey=KEY_SPACE&g_iGameState=0)g_iGameState=1;if( KEY_DOWN = iKey)/按下并且游戏状态为1fl
12、ag=0;/ 以当前朝向给钩子一个向前的速度dSetSpriteLinearVelocityPolar(GoldHook,g_fEmptyHookSpeed, g_fHookRotation);/ 播放挖金者的动作(一个胳膊往下压的动作)dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation1, 0);/0 表示播放一次,这里胳膊往下压就是一次if(iKey=KEY_A)g_fHookRotation+=30;/按下A键使钩子向左移动30度if(iKey=KEY_D) g_fHookRotation-=30;/按下D键使钩子向右移动30度/
13、=/ 引擎捕捉键盘弹起消息后,将调用到本函数void dOnKeyUp( const int iKey )/ 可以在此添加游戏需要的响应函数/=/ 引擎捕捉到精灵与精灵碰撞之后,调用此函数void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )/ 发起者为GoldHook,接受者含有GoldBlock字段dSpriteMountToSpriteLinkPoint( szTarName, GoldHook, 2 );/将金块锚定在钩子上flag=0; iSize=dGetSpriteWidth( szTarNa
14、me );dSpriteMoveTo(GoldHook,g_fHookStartPosX, g_fHookStartPosY, (10.f - iSize) / 10.f) * g_fEmptyHookSpeed, 1);/使钩子向初始位置移动,即会拉dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation3, 1 );/播放拉金块的动作strcpy(szGotGoldName,szTarName);/复制并保存当前抓取到金块的名称if(g_iGameState = 2)/获取钩子X方向的速度floatfSpeedX=dGetSpriteLi
15、nearVelocityX(GoldHook);/获取钩子Y方向的速度floatfSpeedY=dGetSpriteLinearVelocityY(GoldHook);/当速度接近为0时,即可判定其已到达初始点if( fSpeedX -0.00001f & fSpeedY -0.00001f )/解除金块与钩子的锚定dSpriteDismount(szGotGoldName);/删除获取的金块g_iGoldCount-;count+;dDeleteSprite(szGotGoldName);/回拉结束,设定状态为0g_iGameState = 0;/播放矿工的动画,即准备拉金子的动画dAnimateSpritePlayAnimation(GoldMan,GolderManAnimation2, 0 ); g_iGameState =2;flag=1;/=/ 引擎捕捉到精灵与世界边界碰撞之后,调用此函数./ iColSide : 0 左边,1 右边,2 上边,3 下边void dOnSpriteColWorldLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年丽江市国企招聘考试基础题库
- 吉林省-《生物化学》电子教案-细胞信号转导(人卫版)
- 寒假安全教育一封信
- 二零二五年度高速公路服务区临时车位租赁协议3篇
- 广告制作常用材料教学文案
- 老年公寓入住长者健康状况评估表-养老院入住老年人健康状况评估表-健康评估表格
- 2024年阜阳市人民医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年河北工业职业技术学院高职单招语文历年参考题库含答案解析
- 2024年长汀县城关医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年江西工业贸易职业技术学院高职单招职业适应性测试历年参考题库含答案解析
- 化工装置常用英语词汇对照
- 隔膜压缩机(课堂PPT)
- 物资采购管理流程图
- 无牙颌解剖标志
- 标准《大跨径混凝土桥梁的试验方法》
- 格拉斯哥昏迷评分(GCS)--表格-改良自用
- ISO9001记录保存年限一览表
- 儿童晕厥诊断指南(2016年修订版)倪世宏
- DLT666-2012风电场运行规程
- 检定校准证书模板(共5页)
- 浅谈小学数学核心素养下图形与几何领域中空间观念的培养
评论
0/150
提交评论