游戏“黄金矿工”设计思路讲课教案

合集下载

幼儿的采矿游戏怎么玩教案

幼儿的采矿游戏怎么玩教案

幼儿的采矿游戏怎么玩教案教案标题:幼儿的采矿游戏怎么玩教案教案目标:1. 帮助幼儿了解采矿的概念和过程。

2. 提供给幼儿参与采矿游戏的机会,以培养他们的观察力、协作能力和问题解决能力。

3. 通过游戏,促进幼儿的自主学习和创造力。

教案步骤:引入:1. 通过展示一些矿石或宝石的图片,引起幼儿的兴趣和好奇心。

2. 向幼儿解释什么是采矿,以及采矿的过程。

活动准备:1. 准备一个模拟采矿场景的游戏区域,包括一个沙盆或沙箱,一些矿石或宝石的模型,小铲子、筛子等工具。

2. 将矿石或宝石隐藏在沙子中,确保每个幼儿都能找到一些。

活动进行:1. 介绍游戏规则:幼儿们需要在沙子中找到隐藏的矿石或宝石,并将其放入自己的“矿石袋”中。

2. 鼓励幼儿们观察沙子中的细节,寻找可能隐藏矿石或宝石的迹象。

3. 提醒幼儿们注意使用小铲子和筛子等工具进行挖掘和筛选。

4. 鼓励幼儿们在找到矿石或宝石后,与其他幼儿分享他们的发现,并一起讨论它们的特点和价值。

5. 引导幼儿们思考采矿的过程,例如:找到矿石、挖掘、筛选、收集等。

活动总结:1. 邀请幼儿们一起回顾整个游戏过程,并讨论他们在游戏中的发现和体验。

2. 引导幼儿们思考采矿的重要性以及采矿对我们生活的影响。

3. 鼓励幼儿们将游戏中学到的知识和经验与实际生活联系起来。

延伸活动:1. 鼓励幼儿们在户外环境中观察和收集不同类型的石头或矿石,并与其他幼儿分享他们的收藏。

2. 组织一次参观当地的矿山或矿物博物馆,让幼儿们亲身了解真实的采矿过程和宝石的价值。

教案评估:观察幼儿在游戏中的参与程度、观察力、协作能力和问题解决能力的表现。

同时,通过与幼儿的交流,了解他们对采矿的理解和认识水平。

教案注意事项:1. 确保游戏区域的安全性,避免幼儿受伤。

2. 鼓励幼儿们尊重和分享彼此的发现,避免争抢和不和谐的行为。

3. 根据幼儿的年龄和发展水平,适当调整游戏的难度和挑战性。

4. 提供足够的时间给幼儿自由探索和玩耍,不要过于干预他们的活动。

java挖金块游戏课程设计

java挖金块游戏课程设计

java挖金块游戏课程设计一、课程目标知识目标:1. 让学生掌握Java基础语法,包括变量声明、数据类型、运算符和流程控制语句;2. 让学生了解面向对象编程的基本概念,如类、对象、方法和继承;3. 帮助学生理解数组的使用,包括一维数组和二维数组;4. 引导学生掌握Java图形用户界面编程,如Swing组件的使用。

技能目标:1. 培养学生运用Java语言编写简单游戏的能力;2. 培养学生运用面向对象编程思想进行问题分析、设计和实现的能力;3. 提高学生团队协作和沟通能力,能在项目开发中分工合作,共同完成任务;4. 培养学生独立调试和解决问题的能力。

情感态度价值观目标:1. 激发学生对编程的兴趣,培养其主动学习和探究的精神;2. 培养学生面对困难和挑战时保持积极的态度,勇于尝试和克服;3. 培养学生具备良好的团队协作精神,尊重他人意见,共同完成任务;4. 引导学生关注社会热点问题,将所学知识应用于实际生活,提高社会责任感。

本课程针对高年级学生,结合Java挖金块游戏项目,注重理论与实践相结合,旨在提高学生的编程能力和综合素质。

课程要求学生在掌握基本知识的基础上,充分发挥自身潜能,通过团队协作完成具有一定难度的游戏项目。

通过本课程的学习,使学生能够将所学知识应用于实际编程实践,为未来进一步学习和职业发展打下坚实基础。

二、教学内容1. Java基础语法:变量声明、数据类型、运算符、流程控制语句(包括条件语句和循环语句);2. 面向对象编程:类与对象、构造方法、封装、继承和多态;3. 数组:一维数组、二维数组、数组操作方法;4. Java图形用户界面编程:Swing组件、事件处理、布局管理器;5. 游戏设计:游戏框架搭建、角色控制、碰撞检测、分数统计;6. 项目实践:分组进行挖金块游戏项目开发,涵盖需求分析、设计、编码、测试等环节。

教学内容与课本关联性如下:1. Java基础语法:对应教材第1-3章;2. 面向对象编程:对应教材第4-6章;3. 数组:对应教材第7章;4. Java图形用户界面编程:对应教材第8章;5. 游戏设计:结合教材实例,进行拓展教学;6. 项目实践:结合教材内容和实际案例,进行综合应用。

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即“空格开始”精灵不可见。

幼儿园活动方案:小小矿工宝藏探索

幼儿园活动方案:小小矿工宝藏探索

小小矿工,宝藏探索一、教学价值小小矿工,宝藏探索是一款幼儿园常用的游戏,它可以帮助幼儿们在玩乐中了解挖掘机的工作原理和探险的乐趣,同时也能够培养幼儿们的团队协作意识和解决问题的能力。

本教案旨在通过游戏教学的方式,让幼儿们更好地理解和掌握知识,提高他们的学习兴趣和主动性。

二、教学目标1.了解挖掘机的工作原理和操作方法;2.培养幼儿们的团队协作意识和解决问题的能力;3.提高幼儿们的空间想象力和判断能力;4.通过游戏教学的方式,让幼儿们更好地理解和掌握知识。

三、教学区域教室或活动室。

四、教学准备1.小小矿工,宝藏探索游戏;2.小型矿车、砖块、铁块、玻璃等模拟工具;3.幼儿专用手套;4.教师PPT。

五、教学介绍1.教师介绍游戏背景和玩法;2.介绍挖掘机的工作原理和操作方法;3.组织幼儿们进行游戏体验。

六、教学重点1.了解挖掘机的工作原理和操作方法;2.培养幼儿们的团队协作意识和解决问题的能力;3.提高幼儿们的空间想象力和判断能力;4.通过游戏教学的方式,让幼儿们更好地理解和掌握知识。

七、教学方法1.游戏教学法;2.小组合作教学法;3.教学展示法。

八、教学过程1.游戏背景介绍和PPT展示(5分钟);2.幼儿分组,每组2-3人(5分钟);3.给每组提供小型矿车、砖块、铁块、玻璃等模拟工具,让幼儿们自由组装挖掘机(10分钟);4.每组选择一名幼儿扮演“挖掘机司机”,其他幼儿扮演“矿工”,组成小型团队,进行宝藏探险(20分钟);5.游戏结束后,教师进行总结和点评(10分钟)。

九、教学反思1.游戏的难度有些大,需要教师给予适当引导;2.在游戏过程中幼儿们出现了一些问题,需要及时处理;3.教师需要对幼儿们的表现进行评估和记录。

十、教学案例小小矿工,宝藏探索是一款非常适合幼儿园教学的游戏。

在游戏中,幼儿们可以了解到挖掘机的工作原理和操作方法,培养团队协作意识和解决问题的能力,并且还可以提高幼儿们的空间想象力和判断能力。

“黄金矿工”实验报告

“黄金矿工”实验报告

这样一局游戏完成。 7、 一局游戏完成后,屏幕重新出现“空格开始”的标志,用
户按下空格可以继续游戏,如此往复。
流程图:
数据结构:
1、g_fGoldBornMinX 2、 g_fGoldBornMaxX 3、 g_fGoldBornMinY 4、 g_fGoldBornMaxY
金子左边界 金子右边界 金子上边界 金子下边界
图三:按下↓键,钩子停止转动,开始下放,抓取金块
图四:抓完金块后返回初始界面
功能描述
1、 游戏运行,初始界面出现“空格开始”的提示。 2、 玩家按下空格键,开始游戏。 3、 游戏开始后,界面随机出现 20 个大小不同的金子,并且
钩子开始转动。 4、 按下↓键,钩子停止转动,下放,抓取金子。 5、 抓到金子后,返回到初始位置,被抓到的金子消失。 6、 用户继续按下↓键,继续抓取金子,直到金子被抓取完,
图二:按下空格键开始游戏,出现金块,钩子转动
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力通根保1据过护生管高产线中工敷资艺设料高技试中术卷资0配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料试荷试卷下卷问高总题中体2资2配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可关都能于可地管以缩路正小高常故中工障资作高料;中试对资卷于料连继试接电卷管保破口护坏处进范理行围高整,中核或资对者料定对试值某卷,些弯审异扁核常度与高固校中定对资盒图料位纸试置,卷.编保工写护况复层进杂防行设腐自备跨动与接处装地理置线,高弯尤中曲其资半要料径避试标免卷高错调等误试,高方要中案求资,技料编术试写5交、卷重底电保要。气护设管设装备线备置4高敷、调动中设电试作资技气高,料术课中并3试、中件资且卷管包中料拒试路含调试绝验敷线试卷动方设槽技作案技、术,以术管来及架避系等免统多不启项必动方要方式高案,中;为资对解料整决试套高卷启中突动语然过文停程电机中气。高课因中件此资中,料管电试壁力卷薄高电、中气接资设口料备不试进严卷行等保调问护试题装工,置作合调并理试且利技进用术行管,过线要关敷求运设电行技力高术保中。护资线装料缆置试敷做卷设到技原准术则确指:灵导在活。分。对线对于盒于调处差试,动过当保程不护中同装高电置中压高资回中料路资试交料卷叉试技时卷术,调问应试题采技,用术作金是为属指调隔发试板电人进机员行一,隔变需开压要处器在理组事;在前同发掌一生握线内图槽部纸内 故资,障料强时、电,设回需备路要制须进造同行厂时外家切部出断电具习源高题高中电中资源资料,料试线试卷缆卷试敷切验设除报完从告毕而与,采相要用关进高技行中术检资资查料料和试,检卷并测主且处要了理保解。护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

幼儿园室内挖矿小游戏教案

幼儿园室内挖矿小游戏教案

幼儿园室内挖矿小游戏教案教案标题:幼儿园室内挖矿小游戏教案教案目标:1. 帮助幼儿了解挖矿活动的基本概念和过程。

2. 培养幼儿的动手能力和团队合作精神。

3. 提升幼儿的观察力、注意力和问题解决能力。

教学资源:1. 室内空间(可使用教室或者幼儿园的室内游戏区域)2. 玩沙盘或者玩沙池3. 小铲子、小篮子、小铲子等挖矿工具4. 小石头、小宝石、小金块等挖矿道具5. 图片或视频素材,用于介绍挖矿活动的背景知识教学步骤:引入活动:1. 创设情境:通过展示图片或者播放视频,向幼儿介绍挖矿活动的背景知识,如矿石的形状、颜色和用途等。

2. 引发思考:提问幼儿,让他们思考挖矿活动需要哪些工具和技能。

活动准备:1. 将玩沙盘或者玩沙池放置在教室或者室内游戏区域,并放入一些小石头、小宝石和小金块等挖矿道具。

2. 准备好小铲子、小篮子、小铲子等挖矿工具,确保每个幼儿都能获得一套。

活动实施:1. 介绍挖矿规则:向幼儿解释挖矿活动的规则,如每个幼儿可以选择一个挖矿道具,使用挖矿工具在沙盘或者沙池中挖掘,然后将挖到的石头、宝石或金块放入篮子中。

2. 指导操作:示范如何使用挖矿工具挖掘,鼓励幼儿跟随示范进行操作。

3. 分组合作:将幼儿分成小组,让他们一起挖掘,并鼓励他们相互合作,分享挖到的道具。

4. 观察和讨论:引导幼儿观察挖到的石头、宝石和金块,让他们描述其形状、颜色和质地等特征。

5. 活动总结:与幼儿一起回顾挖矿活动的过程和收获,鼓励他们分享自己的体验和感受。

教学延伸:1. 扩展挖矿活动:可以引入更多的挖矿道具,如挖矿车、挖掘机等,让幼儿体验不同的挖矿方式。

2. 制作挖矿工具:鼓励幼儿使用废旧材料制作属于自己的挖矿工具,培养他们的创造力和环保意识。

3. 探索矿石知识:引导幼儿进一步了解不同类型的矿石,可以通过绘画、手工制作等方式展示他们的学习成果。

评估方法:1. 观察幼儿在挖矿活动中的参与程度和合作精神。

2. 收集幼儿对挖矿活动的反馈和体验,了解他们对活动的理解和学习成果。

教你用Matlab制作黄金矿工小游戏

教你用Matlab制作黄金矿工小游戏

教你⽤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、游戏开始后,界面随机出现20个大小不同的金子,并且钩子开始转动。

4、按下↓键,钩子停止转动,下放,抓取金子。

5、抓到金子后,返回到初始位置,被抓到的金子消失。

6、用户继续按下↓键,继续抓取金子,直到金子被抓取完,这样一局游戏完成。

7、一局游戏完成后,屏幕重新出现“空格开始”的标志,用户按下空格可以继续游戏,如此往复。

流程图:数据结构:1、g_fGoldBornMinX 金子左边界2、g_fGoldBornMaxX 金子右边界3、g_fGoldBornMinY 金子上边界4、g_fGoldBornMaxY 金子下边界5、g_iGoldCount 屏幕中金子数目6、g_iGameState 设置游戏状态7、szGotGoldName[20] 当前抓到金子的名称8、g_fHookRotation 钩子的转动的角速度9、g_fEmptyHookSpeed 钩子的下放的初始速度10、g_fHookStartPosX 存储钩子的初始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个,并保存tmpName数组中,随机获取每个金子的坐标;3、隐藏“空格开始”精灵;4、设置屏幕中剩下的金子数目为20,每当被抓走的一块金子消失后屏幕中剩下的金子数目减1;5、当屏幕中剩下的金子数目为0时,一局游戏结束,返回初始界面,“空格开始”精灵出现;6、重新进行金子精灵的初始化;dOnKeyDown(const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress ) 游戏开始和控制按钮:1、游戏还未开始,即游戏状态为0,如果空格按被下,则将游戏状态改为1,此时对程序的数据进行初始化,“空格开始”精灵消失,金子出现,钩子转动;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 g_fGoldBornMinY = 0;int g_fGoldBornMaxY = 0;int g_iGoldCount = 20;int g_iGameState=2;int flag=1;int flagnum=0;char szGotGoldName[20] ; //当前抓到金子的名称float g_fHookRotation = 0.f;float g_fEmptyHookSpeed =35.f;float fTimeDelta;float g_fHookStartPosX; //存储钩子的初始X位置float g_fHookStartPosY; //存储钩子的初始Y位置/////////////////////////////////////////////////////////////////////////////////////////// //// 主函数入口//////////////////////////////////////////////////////////////////////////////////////////// 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; //金子右边界g_fGoldBornMinY = dGetScreenTop() + 20; //金子上边界g_fGoldBornMaxY = dGetScreenBottom() - 5; //金子下边界g_fHookStartPosX = dGetSpritePositionX("GoldHook"); //获取钩子的初始X坐标g_fHookStartPosY = dGetSpritePositionY("GoldHook"); //获取钩子的初始Y坐标dSetSpriteCollisionSend("goldHook", 1);dSetSpriteCollisionReceive("goldTemplate", 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 fThisRotate = 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",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 && fSpeedX > -0.00001f && fSpeedY < 0.00001f && fSpeedY > -0.00001f ){//解除金块与钩子的锚定dSpriteDismount(szGotGoldName);//删除获取的金块dDeleteSprite(szGotGoldName);//回拉结束,设定状态为0g_iGameState = 0;//播放矿工的动画,即准备拉金子的动画if(flagnum){g_iGoldCount--;}}}// 播放挖金者的动作(恢复初始守候动作)dAnimateSpritePlayAnimation("goldMan", "GolderManAnimation2", 1);if(g_iGoldCount==0){g_iGameState = 0;dSetSpriteVisible("GameBegin",1);g_iGoldCount = 20;flag=1;}};dAnimateSpritePlayAnimation("goldMan", "GolderManAnimation2", 1);// 关闭游戏引擎dShutdownGameEngine();return 0;}//========================================================================= =//// 引擎捕捉鼠标移动消息后,将调用到本函数void dOnMouseMove( const float fMouseX, const float fMouseY ){// 可以在此添加游戏需要的响应函数}//========================================================================= =//// 引擎捕捉鼠标点击消息后,将调用到本函数void dOnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY ){// 可以在此添加游戏需要的响应函数}//========================================================================= =//// 引擎捕捉键盘按下消息后,将调用到本函数// iAltPress iShiftPress iCtrlPress 分别为判断Shift,Alt,Ctrl当前是否也处于按下状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验:黄金矿工完成本实验后,可以实现矿工抓金子并计分的效果,如下所示:复制金块学习目标学习应用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坐标。

相关文档
最新文档