游戏“黄金矿工”设计思路
- 格式:doc
- 大小:2.29 MB
- 文档页数:21
任务命题二叉树类的实现任务技术标准(必须实现的功能要求及达到的要求)1) 掌握二叉树的特点2) 完全二叉树的顺序存储3) 完全二叉树的链式存储任务考核标准1) 任务满分为100分。
2) 程序不编译通过0分。
3) 完全二叉树的顺序存储功能实现完整50分。
4) 完全二叉树的链式存储功能实现完整50分。
任务命题迷宫游戏任务技术标准(必须实现的功能要求及达到的要求)1) 掌握迷宫游戏中的基本寻路算法2) 在寻路算法中正确使用数据结构任务考核标准1) 任务满分为100分。
2) 程序不编译通过0分。
3) 正确实现游戏中的寻路算法50分。
4) 在寻路算法中使用STL中的数据结构50分。
任务命题实现画图工具中的画笔功能及划线功能任务技术标准(必须实现的功能要求及达到的要求)1) 掌握GDI的使用方式2) 掌握GDI使用流程3) 掌握GDI绘制的功能任务考核标准1) 任务满分为100分。
2) 程序不编译通过0分。
3) 实现画笔功能50分。
4) 实现划线功能50分。
任务命题鼠标拖拽实时计算两线之间的夹角。
任务技术标准(必须实现的功能要求及达到的要求)1) 掌握向量的基本含义。
2) 掌握向量乘法的使用方式。
3) 实时计算两条线的夹角。
任务考核标准1) 任务满分为100分。
2) 程序不编译通过0分。
3) 实现线段的绘制30分4) 能够实时计算向量夹角50分5) 能够自己实现向量及其运算20分。
任务命题☆实现黄金矿工游戏逻辑任务技术标准(必须实现的功能要求及达到的要求)1) 了解黄金矿工游戏逻辑2) 实现黄金矿工游戏逻辑3) 实现像素级的碰撞检测任务考核标准1) 任务满分为100分。
2) 程序不编译通过0分。
3) 正确渲染40分。
4) 正确实现黄金矿工游戏逻辑30分。
5) 实现像素级碰撞检测30分。
任务命题在迷宫游戏中使用A*寻路算法任务技术标准(必须实现的功能要求及达到的要求) 1) 在迷宫游戏中使用A*寻路算法。
任务考核标准1) 任务满分为100分。
黄金矿工c语言
黄金矿工是一款经典的休闲游戏,玩家需要控制一个矿工在地下挖掘金矿。
在游戏中,玩家需要使用钩子抓取金矿以赚取金钱,但是不同的金矿价值不同,有些金矿还会有特殊属性。
游戏中还会出现各种障碍物和道具,需要玩家灵活应对。
如果想要使用C语言编写黄金矿工游戏,需要掌握基本的编程知识,例如变量、数组、循环、条件语句等。
在编写游戏时,可以使用C语言的图形库来实现游戏界面的绘制和交互效果。
需要注意的是,图形库的使用可能会因操作系统和编译器的不同而有所区别。
在游戏中,需要定义各种变量来记录游戏的状态和玩家的分数。
例如,可以定义一个二维数组来表示金矿的位置和价值,一个整型变量来表示玩家的当前分数,一个布尔型变量来表示游戏是否结束等。
同时,需要使用循环和条件语句来控制游戏的流程和判断玩家是否获得分数。
除了基本的游戏逻辑,还可以添加一些特殊的道具和障碍物来增加游戏的趣味性。
例如,可以添加一个炸弹道具,让玩家在一次挖掘中获得更多的金矿,但是也有可能炸掉一些有价值的矿物;还可以添加一个地震障碍物,让玩家在地下挖掘时受到震动,需要适应地震的影响来继续挖掘。
总之,使用C语言编写黄金矿工游戏需要掌握基本的编程知识和图形库的使用,还需要发挥创意来设计游戏的各种元素,让玩家在游戏中获得乐趣。
C语言课程设计--黄金矿工一、实验内容玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。
要求如下:1.游戏的初始界面如下图(一),单机键盘上的空格键进入游戏,进入后界面如图(二),金块的总数是20,大小位置是随机的。
2.在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。
当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子,此时矿工是向下摇动转轴。
获取到金子往回拉后,矿工是不断转动转轴,知道金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。
3.伸出的钩子如果碰触到金子,则钩子和金子一起往回拉,回收的速度根据抓取到的金子的大小变化而变化,金子越大,回拉的速度越慢,反之亦然。
如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。
4.抓取到的金子拉回到转轴处消失,此时金子数目减少一个。
如果玩家将所有金子抓取完,游戏返回到如图(一)的初始界面。
图(一)图(二)二、实验指南实验一开始实验【实验任务】步骤一、打开FunCode,创建一个的C语言项目;步骤二、导入Goldman模板。
【实验思路】按实验指导完成。
【实验指导】1、打开FunCode,点击“项目”菜单,选择“创建C语言工程”注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。
2、点击菜单“项目”中的“导入地图模块”,如图一。
跳出一个对话框,选中“Goldman”模板,点击“导入到工程”按钮,如图二。
图一图二3、导入成功后的,界面如下图所示:实验二单击空格键,开始游戏【实验内容】步骤、启动游戏显示“空格开始”,单击空格键进入游戏初始界面。
【实验思路】系统会自动响应d OnKeyDown函数来响应键盘按下消息,这部分代码实现在main.cpp里。
我们要做的就是通过在main.cpp的dOnKeyDown函数里实现我们的代码。
当用户单击键盘上的空格键之后,设置GameBegin即“空格开始”精灵不可见。
C语言课程设计报告
机房名称
时间
学院
专业班级
姓名
学号
指导教师
五、运行相关界面及简介
Ⅰ.运行程序进入游戏的第一个场景:左上方是倒计时系统,由60秒逐渐递减;右上方是计分系统,钩子抓取金子等时会自动加分。
图 2
Ⅱ、按下空格键,金子,钻石,炸弹及石头自由分布;矿工手中的钩子不停地循环转动;倒计时系统开始倒计时。
图 3
26
C语言课程设计报告
Ⅲ.待到合适时机,按下键,钩子开始运动,抓取金子等。
①抓到金子时,金子随钩子一起返回矿工手中并消失,积分系统自动加20分
图4
②抓到钻石时,钻石随钩子一起返回矿工手中并消失,且绳子速度加快,积分系统
自动加50分
图 5
③抓到炸弹时,炸弹爆炸,不加分,钩子回去
图6
⑤抓到石头时,钻石随钩子一起返回矿工手中并消失,但钩子的速度减缓,积分系统自
动加5分
图 7
28
C语言课程设计报告
⑤碰到边界时,钩子按原路返回矿工手中,但钩子的速度不变。
图8
Ⅳ.当计时器倒数到0时,游戏结束。
计分系统不再加分。
图9
图10 Ⅴ.按下回车键,返回初始状态
图11
30
C语言课程设计报告VI.制作过程中
附图 12. 制作中。
教你⽤Matlab制作黄⾦矿⼯⼩游戏⽬录效果步骤图⽚准备背景构建绘制⽖⼦让⽖⼦转起来绘制⽯块点击下箭头移动⽖⼦⽖⼦与⽯头和边缘碰触判断抓取⽯块和显⽰⾦钱完整代码效果步骤图⽚准备背景构建function goldMinerMainfig=figure('units','pixels','position',[50 100 750 500],...'Numbertitle','off','menubar','none','resize','off',...'name','goldMiner');axes('parent',Mainfig,'position',[0 0 1 1],...'XLim', [0 750],...'YLim', [0 500],...'NextPlot','add',...'layer','bottom',...'Visible','on',...'YDir','reverse',...'XTick',[], ...'YTick',[]);bkgPic=imread('.\pic\bkg.png');image([0,750],[0,500],bkgPic)[manPic,~,manAlp]=imread('.\pic\man.png');image([400-60,400+60],[49.5-45,49.5+45],manPic,'AlphaData',manAlp)绘制⽖⼦由于⽖⼦要不断调整⾓度因此⽤surface格式绘制,我们需要将⽖⼦图⽚矩阵范围调整⾄[0,1],并将透明处数值调成nan [clawPic,~,clawAlp]=imread('.\Pic\claw.png');clawPic=double(clawPic)./255;clawPicR=clawPic(:,:,1);clawPicG=clawPic(:,:,2);clawPicB=clawPic(:,:,3);clawPicR(clawAlp<1)=nan;clawPicG(clawAlp<1)=nan;clawPicB(clawAlp<1)=nan;clawPic(:,:,1)=clawPicR;clawPic(:,:,2)=clawPicG;clawPic(:,:,3)=clawPicB;clawPos=[380,75];ropePos=[380,75];[xgrid,ygrid]=meshgrid((1:size(clawAlp,2))./2,(1:size(clawAlp,1))./2);xgrid=xgrid-size(clawAlp,2)/4;thetaList=linspace(-2*pi/5,2*pi/5,50);thetaIndex=1;theta=thetaList(thetaIndex);%当前⽖⼦转动⾓度v=0;%⽖⼦下移速度dir=1;%1或-1⽖⼦转动⽅向grabbing=false;%是否正在抓取⽯块cost=cos(theta);sint=sin(theta);rotateX=cost.*xgrid+sint.*ygrid;rotateY=cost.*ygrid-sint.*xgrid;drawClawHdl=surface(rotateX+clawPos(1),rotateY+clawPos(2),...zeros(size(clawAlp)),clawPic,...'EdgeColor','none');drawLineHdl=plot([clawPos(1),ropePos(1)],[clawPos(2),ropePos(2)],'k','LineWidth',2);让⽖⼦转起来⽖⼦旋转就是单纯的使⽤旋转矩阵:fps=20;game=timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @minergame);start(game)function minergame(~,~)if ~grabbingswitch 1case thetaIndex==1,dir=1;case thetaIndex==50,dir=-1;endthetaIndex=thetaIndex+dir;theta=thetaList(thetaIndex);cost=cos(theta);sint=sin(theta);rotateX=cost.*xgrid+sint.*ygrid;rotateY=cost.*ygrid-sint.*xgrid;elseendend绘制⽯块stoneName={'gold','gold','stone1','stone2','diamond'};stonePic{length(stoneName)}=[];stoneAlp{length(stoneName)}=[];for i=1:length(stoneName)[C,~,Alp]=imread(['.\pic\',stoneName{i},'.png']);stonePic{i}=C;stoneAlp{i}=Alp;endstoneV=[-2,-3,-3,-3,-5];%拿起⽯头后⽖⼦移动速度stonePrice=[800,500,200,100,1000];stoneSize=[50,50;30,30;24,20;15,12;8,8];stonePos=[200,300;400,350;500,200;50,240;50,300;700,420;170,180];stoneType=[1,2,3,4,5,1,2];stoneTag=1:length(stoneType);stoneXrange=[stonePos(:,1)-stoneSize(stoneType',1),stonePos(:,1)+stoneSize(stoneType',1)]; stoneYrange=[stonePos(:,2)-stoneSize(stoneType',2),stonePos(:,2)+stoneSize(stoneType',2)]; for i=1:length(stoneTag)drawStone(stonePos(i,:),stoneType(i),stoneTag(i))endfunction drawStone(pos,i,j)image([-stoneSize(i,1),stoneSize(i,1)]+pos(1),...[-stoneSize(i,2),stoneSize(i,2)]+pos(2),...stonePic{i},...'AlphaData',stoneAlp{i},...'UserData',j)end点击下箭头移动⽖⼦set(gcf, 'KeyPressFcn', @key)function key(~,event)switch event.Keycase 'downarrow'grabbing=true;v=4;endendfunction minergame(~,~)if ~grabbing%这⾥是让⽖⼦转动的⼀堆代码%。
黄金矿工方案介绍黄金矿工游戏是一款经典的街机游戏,玩家需要控制游戏中的矿工,在有限的时间内通过操作挖掘机,挖掘地下的黄金资源。
本文档将详细介绍黄金矿工方案,包括游戏规则、游戏地图、游戏机制等。
游戏规则黄金矿工游戏的基本规则如下:1.玩家需要通过点击或按下特定键操作挖掘机。
挖掘机的前方有一根绳子,能够控制矿工下降到地下进行挖掘。
2.挖掘机可以在水平方向上移动,玩家需要控制挖掘机移动到合适的位置进行挖掘。
3.矿工在地下挖掘时,可以通过点击或按下特定键将挖掘出的物品收回地面。
物品有不同的价值,如黄金、宝石等。
4.挖掘出的物品价值越高,玩家获得的分数越多。
5.在有限的时间内,玩家需要获取尽可能多的分数。
游戏地图黄金矿工游戏的地图是一个有地上和地下两个区域的场景。
地上是挖掘机所在的位置,地下是矿工进行挖掘的地方。
地图示意图如下:************************ ** 地下挖掘区域 ** ** ** *********** ** * * ** * 挖掘机 * ** * * ** * * ** *********** ** ** ************************游戏机制黄金矿工游戏有几个重要的机制:1.时间限制:在有限的时间内,玩家需要尽可能多地挖掘黄金和宝石。
2.物品价值:挖掘出的物品有不同的价值,玩家需要根据物品的价值来选择是否收回。
3.碰撞检测:挖掘机在地下时,需要检测是否与矿石或其他物体碰撞,以避免损失。
4.游戏结束:当时间结束或挖掘机碰撞到障碍物时,游戏结束,玩家可以根据获得的分数进行排名。
游戏策略黄金矿工游戏的成功关键是找到合适的策略来最大化获得的分数。
以下是一些常见的游戏策略:1.挖掘有价值的物品:挖掘黄金和宝石可以获得较高的分数,因此优先选择这些物品进行挖掘。
2.避免碰撞:挖掘机在地下时,需要小心避免与矿石或其他物体碰撞,否则会损失时间和分数。
3.时间管理:合理安排时间,不要浪费太多时间在低价值的物品上,要尽可能多地挖掘高价值的物品。
一、每关目标分数的设置:(前十关,第十关以后就每关增加2075,但到某一关又有另外的增加算法,没有统计过~)观察下面一组数:650、1195、2010、3095、4450、6075、7970……非等差也非等比数列,比较难发现其中的规律。
不过其中每关目标分数的差=545、815、1085、1355、1625……则就是一个等差数列,有Sn=545+270(n-1)推出Rn+1=Rn+545+270(n-1)n>0然后推出Rn=105+545n+135(n-1)(n-2)n>0证明方法省略了,读初三以上的中学朋友不妨用数学归纳法证明一下~~注:结论:每关的目标分数的增长呈抛物线上升,也就是说,开始的时候如果你不积累多一点分数,当你发现每次过关时分数总比目标分数多不了多少的话,那很遗憾告诉你,你离Game Over不远了。
尤其是到了第十关以后,有些关卡最多只能拿一千几百分,很多时候你不得不吃老本去维持生计,所以你要想办法有那么多拿那么多。
二、战略思路从第一个目标分数的设置我们可以看出,要想生存下去,靠什么?永远不要指望500分或250分的黄金,你唯一可以依靠的是——钻石!首先看看得分主体的布局设置:前三关,随便玩都可以玩得过去。
第二关或第三关可能有一颗钻石,但买不买优质钻石影响都不大,通常前三关的优质钻石价值都约少于300。
过了前面三关,开始进入大循环了~就是所在的(关卡-3)/7的余数就是下面的循环关卡的卡数:1、两个或四个问号关:若有幸运叶子就买,但太贵就不要买了,通常买了叶子拿到问号钱一定会是700,但如果拿到雷管也说明运气不好了。
不买也无妨,有时可以连续拉两个800的问号,买了反而拿到的是清一色雷管(不过这种机会很小),我曾试过拉一个重量跟500金一样的问号,最后得2元~不过记住进入大循环的第一关绝对没有钻石,千万不要买优质钻石~~2、三个或四个钻石关(有时只有一个):有优质钻石的话你要慎重考虑买不买了,因为这些钻石是非常难拿到的,分布在两个角,而且前面都有障碍,风险比较高,个人感觉是买大力药水比较保险。
实验:黄金矿工完成本实验后,可以实现矿工抓金子并计分的效果,如下所示:复制金块学习目标学习应用dGetScreenLeft,dGetScreenRight,dGetScreenTop,dGetScreenBottom学习应用srand函数。
这节我们实现黄金矿工的金块随机分布,并设置不同金块的大小,为后续的抓取金块做好准备。
Step1:图片资源导入新建一个新的项目,取名为GoldenManDemo。
添加如图所示资源到环境中:并按如下所示布置图片位置:并为金子取名为goldTemplateStep2:本实验用到的API/* dGetScreenLeft:获取世界边界之左边X坐标* 返回值:左边界X坐标*/extern float dGetScreenLeft();/* dGetScreenTop:获取世界边界之上边Y坐标* 返回值:上边界Y坐标*/extern float dGetScreenTop();/* dGetScreenRight:获取世界边界之右边X坐标* 返回值:右边界X坐标*/extern float dGetScreenRight();/* dGetScreenBottom:获取世界边界之下边Y坐标* 返回值:下边界Y坐标*/extern float dGetScreenBottom();/* dSetSpriteWidth:设置精灵外形宽度* 参数szName:精灵名字* 参数fWidth:宽度值,大于0*/extern void dSetSpriteWidth( const char *szName, const float fWidth );/* dGetSpriteWidth:获取精灵外形宽度* 参数szName:精灵名字* 返回值:精灵宽度值*/extern float dGetSpriteWidth( const char *szName );/* dRandomRange:获取一个位于参数1到参数2之间的随机数* 返回值:int,范围iMin - iMax* 参数iMin:小于iMax的整数* 参数iMax:大于iMin的整数*/extern int dRandomRange( const int iMin, const int iMax );Step 3:思路阐述要实现金块的随机分布,首先需要利用模板复制一定数量的金块,然后将他们随机布置在窗口中,可以通过dSetSpritePosition来设置金块的横纵坐标。
JA V AME程序设计课程设计说明书题目:手机黄金矿工游戏学院:计算机与信息工程学院专业:计算机科学与技术班级:网络10-1班*名:***学号:107起止时间:2013-6-24—2013-7-5成绩:课程设计成绩评定表质量评价指标评价项目具体要求满分得分学习态度学习认真,态度端正,遵守纪律,出勤情况良好,能够独立完成设计工作。
20工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。
20设计说明书质量设计方案正确、表达清楚;设计思路、方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。
30答辩陈述和回答问题陈述简明扼要,思路清晰,清楚流利,回答问题准确,基本概念清楚,有理有据,有一定深度。
30评定成绩□优秀□良好□中等□及格□不及格评定人员签名2013年7 月5 日课程设计任务书一、设计题目:《手机黄金矿工游戏》二、设计内容:黄金矿工是一款备受玩家喜爱的经典游戏。
本设计针对黄金矿工实现了新游戏,恭喜过关、游戏失败、暂停游戏、继续游戏或重新开始等过程。
可以清楚的演示各个画面的切换和一些游戏开发的类库。
三、设计要求:1、开始显示欢迎界面,然后是游戏界面,主界面显示各种键的功能以及菜单-开始游戏和离开游戏。
2、开始玩游戏,如果赢了可进入下一关或重新开始。
采用子菜单的重新开始来实现以上功能。
3、游戏期间可以暂停游戏。
子菜单选项的暂停/继续游戏、离开游戏实现以上功能。
四、工作计划:时间完成内容提交文档备注第1天查找资料,确定题目,选择方案课程设计说明书设计准备阶段第2天第3天设计建模设计阶段第4天第5天详细设计与实现编码测试阶段第6天第7天第8天整理材料,撰写设计说明书收尾阶段第9天第10天课程设计答辩课程设计说明书、设计源代码课程设计答辩、考核,评定成绩指导教师:王艳涛陈伟教研室主任:高殿武2013 年6 月25 日本科课程设计说明书目录1、程序的算法及说明 (2)1.1、程序算法 (3)1.2、程序的使用方法 (3)2、程序的项目结构及说明 (5)3、程序运行与发布 (5)3.1欢迎界面 (6)3.2主界面 (6)3.3 游戏界面 (7)4、总结 (9)5、参考文献 (9)附录:程序源代码 (10)1、程序的算法及说明本科课程设计说明书1.1、程序算法游戏规则:黄金矿工游戏的目的是用最少的时间尽量钩到所有的金块与石头块。
实验:黄金矿工完成本实验后,可以实现矿工抓金子并计分的效果,如下所示:复制金块学习目标学习应用dGetScreenLeft,dGetScreenRight,dGetScreenTop,dGetScreenBottom学习应用srand函数。
这节我们实现黄金矿工的金块随机分布,并设置不同金块的大小,为后续的抓取金块做好准备。
Step1:图片资源导入新建一个新的项目,取名为GoldenManDemo。
添加如图所示资源到环境中:并按如下所示布置图片位置:并为金子取名为goldTemplateStep2:本实验用到的API/* dGetScreenLeft:获取世界边界之左边X坐标* 返回值:左边界X坐标*/extern float dGetScreenLeft();/* dGetScreenTop:获取世界边界之上边Y坐标* 返回值:上边界Y坐标*/extern float dGetScreenTop();/* dGetScreenRight:获取世界边界之右边X坐标* 返回值:右边界X坐标*/extern float dGetScreenRight();/* dGetScreenBottom:获取世界边界之下边Y坐标* 返回值:下边界Y坐标*/extern float dGetScreenBottom();/* dSetSpriteWidth:设置精灵外形宽度* 参数szName:精灵名字* 参数fWidth:宽度值,大于0*/extern void dSetSpriteWidth( const char *szName, const float fWidth );/* dGetSpriteWidth:获取精灵外形宽度* 参数szName:精灵名字* 返回值:精灵宽度值*/extern float dGetSpriteWidth( const char *szName );/* dRandomRange:获取一个位于参数1到参数2之间的随机数* 返回值:int,范围iMin - iMax* 参数iMin:小于iMax的整数* 参数iMax:大于iMin的整数*/extern int dRandomRange( const int iMin, const int iMax );Step 3:思路阐述要实现金块的随机分布,首先需要利用模板复制一定数量的金块,然后将他们随机布置在窗口中,可以通过dSetSpritePosition来设置金块的横纵坐标。
接下来要面临的问题就是,如何获取窗口中不同位置的坐标。
利用dGetScreenLeft,dGetScreenRight,dGetScreenBottom,dGetScreenTop来获取窗口的范围,然后使用dRandomRange在该范围中随机一个新的坐标。
对于金块的大小设置,可以利用dSetSpriteHeight和dSetSpriteWidth来实现。
Step 4:代码详解首先定义全局变量,定义如下全局变量:int g_fGoldBornMinX = 0;int g_fGoldBornMaxX = 0;int g_fGoldBornMinY = 0;int g_fGoldBornMaxY = 0;int g_iGoldCount = 0;金块布置属于初始化工作,在WinMain的初始化部分添加如下代码:dSetWindowTitle("黄金矿工");g_iGoldCount=20;//金子数量g_fGoldBornMinX = dGetScreenLeft() + 5; //金子左边界g_fGoldBornMaxX = dGetScreenRight() - 5; //金子右边界g_fGoldBornMinY = dGetScreenTop() + 20; //金子上边界g_fGoldBornMaxY = dGetScreenBottom() – 5; //金子下边界利用循环生成20个金子,以goldTemplate为模板int iLoop = 0; //循环变量控制int iSize = 4, iPosX = 0, iPosY = 0; //iSize表示金块大小的变量for( iLoop = 0; iLoop < g_iGoldCount; iLoop++ ){if( iLoop < 10 ) //生成10个小金块,大小为4{iSize = 4;}else if( iLoop >= 10 && iLoop < 16 ) //生成6个中金块,大小为6 {iSize = 6;}else //生成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);iPosY = dRandomRange(g_fGoldBornMinY, g_fGoldBornMaxY);dSetSpritePosition(tmpName,(float)iPosX, (float)iPosY);}编译运行,可得到如下所示的效果:练习:1.自定义金子的大小和数量;旋转钩子学习目标学习应用dSetSpriteRotation函数学会利用屏幕刷新时间fTimeDelta来实现一些复杂的操作。
这节我们实现黄金矿工的钩子180度来回转动,这样矿工就可以控制抓取范围了,也为后面的抓取金子做好准备。
Step1:图片资源导入点击添加一个新的动画添加GolderManAnimation1,GolderManAnimation2,GolderManAnimation3到环境中,添加完后效果如图:将GolderManAnimation2拖进屏幕,并取名为GoldMan,如下图所示:同理,将静态精灵中的钩子,拖进屏幕,按初始界面排放。
并在右侧的“编辑”中设置名称如下:钩子布置好后的效果如下:Step2:本实验用到的API/* dSetSpriteRotation:设置精灵的旋转角度* 参数szName:精灵名字* 参数fRot:旋转角度,范围0 - 360*/extern void dSetSpriteRotation( const char *szName, const float fRot );Step 3:思路阐述实现钩子的180度来回摆动,其实就是不断地设置钩子与地面的夹角从0—180度不断地变化,可以利用dSetSpriteRotation来进行设置。
为了使钩子以恒定的速度来回摆动,我们可以自定义一个初始化速度speed,然后利用游戏屏幕刷新的时间fTimeDelta来实现,即speed * fTimeDelta即为当前钩子所在的角度位置。
Step 4:代码及注释首先定义全局变量,定义如下全局变量:float g_fHookRotation = 0.f; //钩子与地面的夹角;在WinMain的初始化部分,即金块分布的for循环下方添加:const float fRotateSpeed = 45.f; // 摇摆速度,单位度/秒int iHookRotToLeft = 1; //钩子摆动的方向:1 ←;0 →由于钩子摆动在游戏过程中一直进行,所以应该将摆动的代码置于while循环中,在float fTimeDelta = dGetTimeDelta();下方添加如下代码:float fThisRotate = fRotateSpeed * fTimeDelta; // 本次旋转的角度if( iHookRotToLeft ){ //向左转,度数不断变大g_fHookRotation += fThisRotate;if( g_fHookRotation >= 180.f ){ //大于180,置为向右转,即0g_fHookRotation = 180.f;iHookRotToLeft = 0;}}Else{ //向右转,度数不断变小g_fHookRotation -= fThisRotate; //小于0,置为向左转,即 1if( g_fHookRotation <= 0.f ){g_fHookRotation = 0.f;iHookRotToLeft = 1;}}dSetSpriteRotation("GoldHook",g_fHookRotation); //设置钩子的当前角度编译运行,可得到如下所示的效果:练习:1.使钩子从左往右进行旋转释放绳索学习目标学习应用dSetSpriteLinearVelocityPolar,dAnimateSpritePlayAnimation函数学会利用全局变量来控制游戏的运行状态。
这节我们实现黄金矿工在某一角度放下绳索的操作,为之后的真正抓取金子做好准备Step1:图片资源编辑打开funcode,单击地图上的矿工精灵图像,在显示框的上面五个选择左数第二个“编辑此精灵的链接点”,如图所示按如图所示依次单击这位置显示0,保存即可。
同上,点击地图上的钩子精灵,选择“编辑此精灵的链接点”,依次单击这个位置显示0,最后保存即可。
Step2:本实验用到的API/* dSetSpriteLinearVelocityPolar:按角度朝向设置精灵移动速度* 参数szName:精灵名字* 参数fSpeed:移动速度* 参数fPolar:角度朝向*/extern void dSetSpriteLinearVelocityPolar( const char *szName, const float fSpeed, const float fPolar );/* dAnimateSpritePlayAnimation:动画精灵播放动画* 参数szName:精灵名字* 参数szAnim:动画名字* 参数iRestore:播放完毕后是否恢复当前动画. 1 恢复0 不恢复* 返回值:是否播放成功, 1 : 成功0 :不成功*/extern int dAnimateSpritePlayAnimation( const char *szName, const char *szAnim, const int iRestore );/* dGetSpriteLinkPointPosX:获取精灵链接点X坐标。