当前位置:网站首页 > Java教程 > 正文

飞扬的小鸟java教程



需求描述

游戏加载完毕点击界面即可开始游戏。

鼠标点击控制小鸟飞行,或者通过键盘控制小鸟的前后上下也可以,不要撞到管道哦!

控制好小鸟越过障碍飞得更远,获得更高的积分。

 需要更多教程,文末扫描二维码即可

👇🏻👇🏻👇🏻

别忘了扫码领资料哦【高清Java学习路线图

全套学习视频及配套资料

使用的技术点

  • 变量
  • 分支语句
  • 循环语句
  • 面向对象
  • 异常处理
  • Random随机数
  • StringBuffer字符串操作
  • IO操作
  • 多线程
  • swing组件
  • 。。。。

需求分析


代码实现

1、实现界面背景

step1:首先新建一个class表示背景类BackGround。我们要在该类中,加载背景图片。

创建一个包pics,里面先存放背景图:bg.png。

先定义一个常量类Constant,专门用于存储程序中的常量。

代码实现:

 

然后创建BackGround类:

代码实现:

 

代码实现:

 

说明:

  • 整个项目只有这一个背景,所以可以设计为单例模式。
  • 通过getResource()方法加载图片资源。

step2:然后创建一个面板类,上面用于实现背景,小鸟等。GamePanel

这里主要重写paint()方法,将背景图片,显示到面板上。

代码实现:

 

但是首先要在Constant常量类中,设置一些常量:

代码:

 

代码实现:

 

step4:创建Main类,表示程序的入口:

代码实现:

 

运行效果:

2、实现地面移动

思路:

首先得先在Constant常量类中,添加地面的图片路径,并且将地面图片拷贝到pics资源目录下。

 

然后创建Ground类:

然后创建Ground类:

 

说明:在该类中要计算出地面的坐标点x和y。

x为0即可,而y的值为背景图片的高度减去地面图片的高度。

然后添加一个地面移动的方法:

 

所谓的运动地面,就是就是修改x的值,地面向左侧移动,所以x--。

然后要修改GamePanel中的paint()方法,绘制地面:

 

然后在GamePanel类中添加一个新增的方法action(),表示游戏的动作,我们需要设置一个死循环,来让地面不停的移动。

多久移动一次呢,我们可以设置一个速度,其实就表示游戏的速度,可以初始化一个常量,每当过一关,游戏的速度可以适当的增加。

现在定义一个常量:

 

在GamePanel类中添加一个变量speed,表示速度:

 

修改GamePanel()构造方法:

 

然后添加一个action()方法,

 

为了不让地面移动太快,频繁的绘制界面,我们需要让程序睡眠一下,这个睡眠的时间,其实表示游戏的速度,就是地面和柱子移动的速度。

然后在GameFrame的initFrame()方法中,调用action()方法:

 

运行效果:


3、显示开始和结束

思路:整个游戏分为3个状态:游戏开始前,开始玩,游戏结束。定义一个变量state,0表示未开始,1表示玩ing,2表示game over,游戏结束。

当游戏未开始状态,显示开始图片。

点击开始游戏后,可以玩,当小鸟撞到地面或者天空或者柱子,游戏结束。

游戏结束时,显示结束图片。

在GamePanel类中,添加一个变量state

 

然后在构造方法中,初始化state的状态,以及加载开始和结束的图片:

 

同时将两张图片,添加到pics目录下,并且在Constant类中,添加常量值:

 

修改绘图的方法paint(),先绘制背景,然后根据状态不同,绘制不同的图案,最后绘制地面:

 

修改action()方法,添加鼠标事件:

 

运行效果:

点击一下,开始游戏,再点一下结束游戏,效果如图:

开始游戏的时候,小鸟是灰色的,我们希望小鸟能一直扇动翅膀。

小鸟翅膀扇动,其实就是小鸟的8张图循环轮播。我们可以通过数组来实现。

现在Constant类中定义小鸟的图片数量,以及小鸟的初始位置:

 

然后创建一个小鸟类Bird:

 

添加一个小鸟扇动翅膀的方法:

 

然后在GamePanel类中添加小鸟对象,

 

并在构造方法中初始化:

 

修改paint()方法,在未开始游戏的时候,就要绘制小鸟了:

 

修改action()方法,在循环中,除了移动地面外,还要让小鸟扇动翅膀:

 

运行结果:


4、游戏开始

游戏开始后,小鸟就要移动了。还要添加上下两根柱子,柱子向左侧移动,通过点击鼠标,让小鸟上下移动,来躲避柱子。

小鸟上下飞动

我们现在实现小鸟的部分:

游戏开始时,小鸟在距离屏幕左侧120左右的位置就可以:

在Constant类中定义,游戏开始时小鸟的位置:

 

首先修改action()中,case 0里,先修改小鸟的位置

 

然后在paint()方法中,state如果为1,代表游戏开始,应该绘制小鸟和两根柱子,我们先画小鸟:

 

运行效果:

小鸟默认会向下掉,要考虑重力加速度。当点击鼠标的时候,会向上移动。

先在Constant提供常量:

 
 

再添加两个方法:down()表示下降

 

然后修改action()方法:

 

运行结果:

 

在Bird中,再添加一个方法:

 

修改action(),在鼠标抬起的事件中,如果state为1,那么要调用up()方法,让小鸟上升:

 

柱子左右移动

首先在pics下放图片资源pillar.png。然后在Constant类中,添加常量:

 

然后创建柱子类Pillar类:

 

小鸟闯关的柱子,每隔244间距,就要再产生一根柱子。柱子的高度通过随机数来产生,先计算出柱子的高度:柱子图片高度-柱子通道距离114,然后除以2。柱子的最小高度,就是柱子的高度减去背景图高度-地面高度-通道距离。

柱子的y坐标,就因该是柱子的高度和柱子最小高度之间的随机数。

再添加一个移动柱子的方法:

 

然后修改GamePanel类,创建2个柱子对象,因为游戏界面中,最多出现2根柱子。然后再构造方法中,实例化两个柱子对象,并设置x坐标,柱子是从游戏界面右侧,移入到游戏界面上,所以第一个柱子的x值为游戏界面的宽度,第二个柱子要再加柱子间距。

 

修改paint()方法,游戏开始后,绘制柱子:

 
 

运行结果:

5、计算得分

然后在Constant类中,添加和得分相关的常量:

 

在GamePanel中定义score,表示分数,然后在paint()方法中,绘制分数:

 

要想统计分数,得先计算小鸟的各种碰撞,首先在小鸟的类中,添加一个是否碰撞地面的方法,其实就是检测小鸟y的值:

 

再添加一个检测是否碰撞天空的方法,就是游戏界面的顶部:

 

再添加一个检测碰撞柱子的方法:

 

要判断小鸟的横向上,碰撞柱子。

在小鸟类里添加一个方法:

 

再添加一个积分的方法:

 

然后在GamePanel类中修改action()方法:

 

然后修改鼠标事件的监听:

 

当游戏结束的时候,要初始化小鸟和柱子的数据。


6、添加小鸟的键盘事件

在Constant中添加常量:

 

然后在小鸟类中,添加键盘的上下左右事件方法:

 

然后在action()中,添加鼠标事件监听:

 

注意,最后要在GameFrame中,可以响应键盘事件:

 

7、添加背景音乐

先准备一首背景音乐,然后在src上创建一个音乐的资源目录music,并将音乐文件拷贝进去:

然后倒入音频播放的jar包:

在Constant中添加常量:

 

然后创建一个线程类,播放音乐,再提供一个停止播放的方法:

 

然后在GamePanel里创建MusicThread对象,用于播放和停止音乐,在action()中修改代码:

 

 需要更多教程,扫码文末二维码即可得

👇🏻👇🏻👇🏻

别忘了扫码领资料哦高清Java学习路线图

全套学习视频及配套资料

  • 上一篇: java教程306
  • 下一篇: java结构控制教程
  • 版权声明


    相关文章:

  • java教程3062024-12-08 23:58:00
  • java实战开发教程2024-12-08 23:58:00
  • java安装教程苹果版2024-12-08 23:58:00
  • java测试员教程2024-12-08 23:58:00
  • java教程md2024-12-08 23:58:00
  • java结构控制教程2024-12-08 23:58:00
  • java237编程教程2024-12-08 23:58:00
  • 315集java教程2024-12-08 23:58:00
  • java切换空间教程2024-12-08 23:58:00
  • java命令运行教程2024-12-08 23:58:00