你知道黄金矿工游戏涉及到了数学知识吗?

举报
周杰伦本人 发表于 2022/09/29 14:48:06 2022/09/29
【摘要】 你知道黄金矿工游戏涉及到了数学知识吗? 背景 钩子 黄金 总结 你知道黄金矿工游戏涉及到了数学知识吗?黄金矿工的游戏想必大家都玩过,今天我们用java实现一个黄金矿工游戏的功能 背景首先是背景的绘制,游戏的背景大多都图片的堆积,这里我们同样通过加载图片来实现游戏背景我们重写Window类的paint()方法进行绘制窗口:Image offScreenImage = this.createI...

你知道黄金矿工游戏涉及到了数学知识吗?

黄金矿工的游戏想必大家都玩过,今天我们用java实现一个黄金矿工游戏的功能

背景

首先是背景的绘制,游戏的背景大多都图片的堆积,这里我们同样通过加载图片来实现游戏背景

我们重写Window类的paint()方法进行绘制窗口:

Image offScreenImage = this.createImage(768,1000);
Graphics gImage = offScreenImage.getGraphics();
bg.paintSelf(gImage);

这里要说一下,bg是背景类的实例,背景类就是定义这个游戏中的各种关卡的图片元素,人物图片等的。

钩子

背景设置好之后,接下来我们设计钩子的功能

首先我们要画一个线,这也就是钩子的轨迹,画线很简单,调用Graphics的drawLine()方法就可以,游戏的关键是钩子的摇摆,这是角度问题,也是数学问题,我们需要计算起点坐标和终点坐标,

endx = (int) (x +length*Math.cos(n* Math.PI));
endy = (int) (y +length*Math.sin(n*Math.PI));
g.setColor(Color.red);
g.drawLine(x-1,y,endx-1,endy);

我们通过不断改变n的值从而实现钩子的角度的变化

关于线的收回,也就是变短不停的绘制,这里是通过减少length的值来实现收回功能

黄金

黄金可以设置成一个类,它有x y 等坐标属性,对于黄金的加载,同样也是加载图片,对于图片的加载我们可以使用,然后通过Graphics绘制图片

Toolkit.getDefaultToolkit().getImage("gold.gif");
g.drawImage(img,x,y,null);

那么判断钩子是否勾到了黄金呢?遍历所有的黄精和石块,我们还是看直线的终点位置是否在这些物体范围内就可以了

for(Object obj:this.frame.objectList){
  if(endx>obj.x && endx<obj.x+obj.width
          && endy>obj.y && endy< obj.y+obj.height){
      state=3;
      obj.flag=true;
  }
}

这一段代码的逻辑也就是判断是否在矩形中,当在矩形内的时候表名抓取成功,,其中obj.flag是用来表示物体是否抓取成功的属性

这时候需要黄金随线的点移动:

obj.x=endx-obj.getWidth()/2;
obj.y=endy;
if(length<=MIN_length){
  obj.x=-150;
  obj.y=-150;
  obj.flag=false;
  
}

通过代码我们可以看到,物体的坐标是跟着线的终点值改变的,当线的长度缩短到零的时候,物体坐标位置设置到画面之外,从而实现黄金消失的效果,这时候可以定义个score属性来记录分数,这样一个黄金矿工的关键功能就实现了。

总结

这篇文章对黄金矿工的简易功能做了开发,主要涉及线的形成,黄金的抓取的过程做了开发,这里涉及到的角度的变化,涉及到了三角函数的数学知识

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。