这款游戏的起源是越南独立开发者开发的手机游戏,短时间内占据了全球各大手机软件商店免费排行榜的第一位。游戏中玩家控制一只小鸟飞过一个个柱子的间隙。飞的越远分数越高,看玩家能使小鸟在空中坚持飞多久。初始界面如图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所示。

步骤十二:绘制界面

在BirdGame类中重写paint方法,绘制界面。首先绘制地面,代码如图21所示。

使用Graphics的drawImage方法,绘制背景界面的时候,绘制的起点坐标是(0,0)。然后,绘制2个柱子,代码如图22所示。

绘制两个柱子的时候,绘制的起点坐标与Column类的属性x,y的值不同,需要做一些更改,具体见图23。

步骤十三:运行

运行BirdFrame类,显示的界面效果如图26所示。

步骤十四:实现地面的运动

步骤十五:实现柱子的移动

步骤十六:实现鸟的运动

经过时间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所示。

在Bird类添加的代码如图38所示:

从图38可以看出,实现flappy方法,只需要将速度设置为初始速度v0即可。

步骤十八:实现计分

要实现计分,需要进行以下操作:

1、在BirdGame类中增加属性score,用于计分,score初始化为0。

2、在BirdGame类的action方法的主循环中,添加逻辑判断。当柱子的x坐标与鸟的x坐标重合时,则加1分。

3、在BirdGame类的paint方法中将分数画出来。

在BirdGame类中增加的代码如下图所示:

步骤十九:实现鸟的碰撞检测

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;

当鸟的y坐标大于y1(y>y1)并且小于y2(y<y2)时,鸟在缝隙中。

在Bird类添加hit(column)方法,用于判断鸟是否碰撞柱子,代码如图42所示:

修改BirdGame类的action方法,修改的代码如图43所示。

完成上述代码,即完成了判断鸟的碰撞功能。

步骤二十:实现游戏的开始、结束及重新开始

首先,把游戏分成三种状态,分别是start、running以及game_over,start状态的界面效果如图44所示:

觉得本文对你有帮助的话,可以转发关注支持下谢谢·~

Java 飞翔的小鸟小游戏开发 完全源码 + 论文文档相关推荐

  1. java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技 ...

  2. Java 实现 捕鱼达人 小游戏【附源码】

    博主介绍:

  3. java演练 猜奇偶小游戏开发 DB游戏必输的设计

    java演练 猜奇偶小游戏开发 DB游戏必输的设计 阶段一,视频 https://www.ixigua.com/6870390946270446088?logTag=J_BVJOm_LIpQ-hWYY ...

  4. (蔡坤 VS 吴凡)java实现回合制小游戏开发

    (蔡坤 VS 吴凡)java实现回合制小游戏开发 首先定义属性(get set 有参,无参) 代码如下 java package com.jie; import java.util.Random; c ...

  5. Python贪吃蛇小游戏_完整源码免费分享

    文章目录 Python 贪吃蛇小游戏 1. 导包 2. 配置初始化参数 3. 主函数及运行主体 4. 画食物的函数 5. 画贪吃蛇的函数 6. 画网格的函数(非必选,觉得多余的可以忽略此项) 7. 操 ...

  6. 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)

    简介:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的贪吃蛇小游戏.项目源码地址:点击下载. 硬件设计: 普通摇杆,0.96寸OLED 单色屏幕(SPI协议通讯), ...

  7. 基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)

    概述:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的俄罗斯方块小游戏.项目源码地址:点击下载. 硬件要求: 普通摇杆,两个电位器和一个开关组成,左右摇动控制一个电 ...

  8. 小鸟飞行游戏【附源码】

    小鸟飞行游戏,java精品项目,毕业设计,计算机系,计算机毕业设计,程序设计,设计与实现,源码, 小鸟飞行游戏[附源码] 我的网站已经上线了 http://javapub.net.cn/ 博主介绍:

  9. JAVA计算机毕业设计长庚游戏网站Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计长庚游戏网站Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计长庚游戏网站Mybatis+源码+数据库+lw文档+系统+调试部署 本源码技术栈: 项目 ...

  10. mfc使用cef源代码实现_如何获得微信小游戏跳一跳源码以及源代码组合包括哪些...

    很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇瑰网小编带大家来了解一下相关的内容吧. 源代码组合包括哪些 ...

最新文章

  1. Windows 2003系统也玩图片收藏屏保
  2. 【运筹学】线性规划数学模型 ( 单纯形法 | 第一次迭代 | 方程组同解变换 | 计算新单纯形表 | 计算检验数 | 入基变量选择 | 出基变量选择 )
  3. [C入门 - 游戏编程系列] 贪吃蛇篇(四) - 食物实现
  4. consul php,go-micro+php+consul实现简单的微服务
  5. PHP 分布式集群中session共享问题以及session有效期的设置
  6. (27)System Verilog多个线程间通信(队列)
  7. JVM 性能调优监控工具
  8. 理解saltstack 里cmd.run 配合onlyif和unless使用
  9. cuda10安装_Mmdetection的安装和使用
  10. Introduction to Computer Networking学习笔记(二十八):DNS
  11. 惰性学习法与kNN分类
  12. 小鸟云数据盘如何进行挂载?
  13. If this is an unexpected issue and persists you can inspect it running `pod repo update --verbose`
  14. 【计算方法笔记】四阶Runge-Kutta法
  15. 唉,早知如此,何必当初
  16. 论地震、雷击和个人数据备份
  17. unity制作愤怒的小鸟笔记
  18. 每次买新手机后要安装的软件(个人爱好)
  19. Linux命令--mkdir命令:创建目录(文件夹)
  20. E.04.08 They Survived Taiwan’s Train Crash. Their Loved Ones Did Not.

热门文章

  1. 微信小程序赞赏功能,非微信赞赏功能
  2. 【pygame】Python_game-master打飞机demo,并打包exe
  3. 什么是黎曼和?什么是定积分?
  4. java驱动音响设备发音_XP环境下驱动正常、声卡正常但音响没声音怎么解决?
  5. Java理解mian方法
  6. 程序员能写的最佳代码,就是无码!
  7. win10怎么添加打印机
  8. 在Intellij IDEA中使用Debug
  9. dec是几进制(oct是几进制)
  10. C语言 输出斐波那契数列