Java飞翔的⼩鸟⼩游戏开发完全源码+论⽂⽂档
这款游戏的起源是越南独⽴开发者开发的⼿机游戏,短时间内占据了全球各⼤⼿机软件商店免费排⾏榜的第⼀位。游戏中玩家控制⼀只⼩鸟飞过⼀个个柱⼦的间隙。飞的越远分数越⾼,看玩家能使⼩鸟在空中坚持飞多久。初始界⾯如图1所⽰。
完整源码+⽂档+视频 :
玩家在上图所⽰界⾯任意位置,按下⿏标左键,开始游戏。
游戏开始以后,玩家需要不断控制点击屏幕的频率来调节⼩鸟的飞⾏⾼度和降落速度,让⼩鸟顺利的通过画⾯右端的柱⼦间隙。如果玩家不⼩⼼碰到了柱⼦或者落到了地⾯上,则结束游戏。如图2所⽰。
如图2所⽰的左上⾓显⽰了⽤户的得分,每通过⼀个柱⼦间隙得1分。另外,此时玩家可以在如图2所⽰的任意位置,按下⿏标左键,重新开始游戏。
2、步骤
步骤⼀:新建⼯程和包
新建名为teduBirdGame的的Java⼯程,然后,在⼯程下的src⽬录下新建包cn.tedu.bird,最后,将该⼯程所需的图⽚拷贝⾄该包下,⼯程结构如图4所⽰:
在项⽬中,包的名字⼀般为公司域名倒写,再加上项⽬名字,即为包名。
步骤⼆:构建⼯程的结构
⾸先,新建BirdGame类,然后新建Groud类,表⽰游戏中的地⾯;新建Column表⽰游戏中的柱⼦;新建Bird类表⽰游戏中的鸟,这些类继承Jpanel类,都继承⾃Jpanel类。游戏中的各个对象如图5所⽰。
Jpanel是Java图形界⾯化(GUI)⼯具包swing中的⾯板容器类,可以理解为画板,包含在javax.swing包中,是⼀种轻量级容器,可以加⼊到JFrame窗体中。
步骤三:为BirdGame类添加属性
其中,background属性是游戏背景贴图。
步骤四:为Ground类添加属性
Ground类中,各个属性表⽰的含义如图7所⽰:
在Ground类中添加的代码如图8所⽰:
其中,image属性为地⾯的贴图。
步骤五:为Column类添加属性
Column类中,各个属性表⽰的含义如图9所⽰。
在Column类中添加的代码如图10所⽰:
其中,image属性表⽰柱⼦贴图。
步骤六:为Bird类添加属性
代码如图11所⽰:
颜代码查询网image属性表⽰Bird类的贴图,x,y表⽰鸟的中⼼位置,width和height表⽰鸟图⽚的宽度和⾼度。在本实训项⽬中,⼩鸟的⼤⼩⽤⼀个正⽅形区域来表⽰,size即表⽰该正⽅形的边长,⽤于后续的碰撞检测。
步骤七:为BirdGame类添加构造⽅法,初始化属性
通过图12⼤家可以看出实例化Column类的时候,出现了编译错误,这是因为还没有为Column类编写⼀个带参数的构造器。
步骤⼋:为Column类添加构造⽅法,初始化属性
下⾯介绍⼀下x、y坐标的计算⽅式,第⼀个柱⼦的x坐标为x= 432+118=550,第⼆根主⼦的x坐标为x=550+245,因此,柱⼦的x轴坐标可以总结为x = 550+245*(n-1),其中n表⽰第⼏根柱⼦。
可以看出,柱⼦y的坐标范围在132⾄350之间随机分布,使⽤Random类的nextInt⽅法⽣成[0-218)之间的随机数,然后再加上132,这样就能得到132⾄350之间的随机数了。
步骤⼗:为Bird类添加构造⽅法,初始化属性
步骤九:为Ground类添加构造⽅法,初始化属性
步骤⼗⼀:编写main⽅法
在main⽅法中,设置窗⼝的⼤⼩、居中、点击窗⼝的右上⾓“X”关闭窗⼝以及设置窗⼝可见,代码如图20所⽰。
步骤⼗⼆:绘制界⾯
notification的用法
在BirdGame类中重写paint⽅法,绘制界⾯。⾸先绘制地⾯,代码如图21所⽰。
使⽤Graphics的drawImage⽅法,绘制背景界⾯的时候,绘制的起点坐标是(0,0)。然后,绘制2个柱⼦,代码如图22所⽰。
绘制两个柱⼦的时候,绘制的起点坐标与Column类的属性x,y的值不同,需要做⼀些更改,具体见图23。
步骤⼗三:运⾏
运⾏BirdFrame类,显⽰的界⾯效果如图26所⽰。
步骤⼗四:实现地⾯的运动
步骤⼗五:实现柱⼦的移动
java手机游戏下载步骤⼗六:实现鸟的运动
经过时间t的位移s的计算公式:
s = v0 * t  +  g * t * t / 2;
从图33可以看出,经过时间t后⼩鸟的纵坐标位置y1的计算公式为:
y1 =  y - s;
经过t时间后,⼩鸟的运⾏速度v为:
v = v0 - g * t ;
此时,Bird类中添加的代码如下所⽰:
然后,实现鸟的动画处理。使⽤数组,存储要显⽰的图⽚,共计8张,鸟每运动⼀次换⼀张图⽚,以达到鸟的动画效果。此时,Bird类中添加的代码如下:
从上述代码中可以看出,fly⽅法实现了鸟的飞翔。⼀个数对8取余,能够得到0到7之间的数字,正好是images数组中的下标,index/12的⽬的是 使鸟的挥动翅膀次数变慢,即切换照⽚的频率变慢。
接着,在BirdGame类的action⽅法中,调⽤Bird类的fly⽅法和step⽅法。运⾏后,会发现鸟可以动起来了。代码如图34所⽰。
最后,计算倾⾓。假设⽔平移动的位移固定为8,那么倾⾓ = 反正切s/8,在Bird类中添加的代码如下所⽰:
上述代码中,调⽤Java API提供的反正切⽅法atam,计算倾⾓。
接着,在BirdGame类的paint中,为达到鸟的飞翔效果,使⽤Java API,使⼩鸟旋转,代码如图36所⽰。
步骤⼗七:实现⿏标监听事件
要实现⿏标的按下事件,步骤如下:
1. 使⽤“匿名内部类”声明事件
2. 处理⽅法。即在BirdGame类的action⽅法声明事件的处理⽅法;
2、⾸先,在Bird类中添加flappy以实现鸟的飞翔。然后,在处理⽅法中,调⽤Bird类的flappy⽅法。
3、注册事件监听。即在BirdGame类的action⽅法中,注册监听事件。
在BirdGame类中添加的代码如图37所⽰。
sklearn支持向量机拟合在Bird类添加的代码如图38所⽰:
从图38可以看出,实现flappy⽅法,只需要将速度设置为初始速度v0即可。
步骤⼗⼋:实现计分
要实现计分,需要进⾏以下操作:
1、在BirdGame类中增加属性score,⽤于计分,score初始化为0。
2、在BirdGame类的action⽅法的主循环中,添加逻辑判断。当柱⼦的x坐标与鸟的x坐标重合时,则加1分。
3、在BirdGame类的paint⽅法中将分数画出来。
在BirdGame类中增加的代码如下图所⽰:
步骤⼗九:实现鸟的碰撞检测
delphi法的适用对象是什么如何进行调查1、实现鸟碰撞地⾯。
1)为BirdGame类增加boolean变量gameOver,该变量⽤于标识游戏是否结束,如果gameOver的值为true,则表⽰游戏结束了;如果gameOver的值为false,则表⽰游戏没有结束。gameOver的默认值设置为fasle。
2)当检测到碰到地⾯的时候,即gameOver的值为TRUE。在循环中检测是否碰到地⾯。在Bird类中增加⽅法hit(Ground)检测鸟是否碰地⾯。当鸟的y坐标减去size/2⼤于等于地⾯的y坐标时,则与地⾯发⽣碰撞。
3)修改BirdGame类的action⽅法中的主循环,当游戏没有结束的时,执⾏鸟和柱⼦的移动。也就是说,如果游戏结束了,鸟和柱⼦就不移动了。
4)在BirdGame类的paint⽅法添加gameOver的值为true时,显⽰游戏结束界⾯
从图40可以看出,⼩鸟与柱⼦发⽣碰撞的x的坐标计算⼊如下:
x1 = column.x - width/2 - size/2;
x2 = column.x + width/2 + size/2;
当鸟的x坐标⼤于x1(x > x1)并且⼩于x2(x < x2)时与柱⼦发⽣碰撞。但是如果在缝隙中,则不发⽣碰撞,请看如图41。
从图41可以总结出,⼩鸟在柱⼦的缝隙中时y坐标计算如下:
y1 = column.y - gap/2 + size/2;
y2 = column.y + gap/2 - size/2;
大学it课程当鸟的y坐标⼤于y1(y>y1)并且⼩于y2(y<y2)时,鸟在缝隙中。
在Bird类添加hit(column)⽅法,⽤于判断鸟是否碰撞柱⼦,代码如图42所⽰:
修改BirdGame类的action⽅法,修改的代码如图43所⽰。
完成上述代码,即完成了判断鸟的碰撞功能。
步骤⼆⼗:实现游戏的开始、结束及重新开始
⾸先,把游戏分成三种状态,分别是start、running以及game_over,start状态的界⾯效果如图44所⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。