`
Lirongheng
  • 浏览: 5180 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA线程游戏---flappy bird

    博客分类:
  • JAVA
阅读更多

   这本是早就应该要进行总结的博客了,在学习了线程之后,为了巩固自己对线程这个知识的掌握,做了个前段时间玩得好火的一个小游戏——flappy bird。这个游戏早在一个多月前已经做了,不能说是已经做好了,因为里面有好多的问题需要解决,没有及时解决这些问题问题的原因有很多,比如说自己的技术还不够扎实,这段时间也有好多其他的事情要做等等。。。。
   
我大概把游戏分为下面几个部分:
一、游戏场景
游戏主要有三个场景组成,开始场景、主场景、结束场景
二、主场景
主场景是由上下两个水管和水管之间空隙组成,间隙时一定的,下水管可以是随机出来的,然后上水管可以由下水管的数据计算出
三、小鸟
每次按一下向上小鸟坐标就向上加一定的高度,释放后就自由落下
四、游戏成绩
当小鸟没通过一个水管的时候分数就自加一定分值
五、死亡判断
当小鸟碰到水管或者是地面的时候,小鸟死亡,游戏结束。
判断到小鸟坐标与水管坐标或者地面坐标在一定的范围内就可以判断其死亡


做游戏的过程:
1.刚想到做这个游戏的时候,我也没仔细考虑那么多,所以不管它三七二十一,我马上做了个界面出来,然后用线程来让小鸟掉下来,用鼠标监听来控制小鸟的飞行,当时也没把各个对象抽象出来,就一个劲把它放到界面的那个类里面,然后又把地面、水管等陆续加进去,后来随着做的深入,发现这样是行不通的。因为我们做这个游戏还要拿到他的坐标判断游戏是否结束,现在的问题是我把小鸟、水管、地面等都放到一个类里面,根本就不方便往下做,因为这样拿不到他们的数据,比如说他们的坐标等。
2.在上面这样做行不通的时候,我只有停下来思考怎么做,其实很很明显,要把各个对象抽象成为一个类(当然可能还有更好的办法,但是我觉得现在办法是行的通的),这样一个类就只管一个对象,比如说,小鸟一个类、水管一个类、地面有事一个类,这样就能更好的做下去,各个类之间关系也不会那么,让每个类具有自己单一的功能,体现低耦合的思想。
3.做小鸟是比较简单的,毕竟一个线程就能轻松搞定了。。。但是现在水管应该怎么做呢?玩过这个游戏的人都知道,水管是上下对着各一根,上下水管之间的间距也是一定的,而且水管是随机出现的,我是这样做的,我是让上水管随机出现的,这样下水管就可以的位置也就能确定了,因为我们知道游戏面板的高度和上下水管的间距,所以可以确定下水管的位置。具体怎么实现,我下面会说明。
4.还有一步比较重要就是如何判断游戏的输赢。判断游戏的输赢也可以分为两种情况,一种是小鸟掉到地上了;一种是小鸟碰到水管了;当然可能会有人说游戏玩爆机了,当然这种情况我不会让它出现的,我会让水管不停的出来,所以这种情况就不用考虑了。。。
5.还有一个就是计算分数了,这个我觉得可以直接写在判断输赢的类里面,只要小鸟没越过一根水管,就令一个数加一,并显示到游戏面板上就可以了。
6.当然并不是这个游戏就只有那么简单的几步,还有其他的部分,比如说,开始的场景、结束的场景,如果真的要把做的很完美还有一点点细节需要考虑。


下面是我如何用代码实现的:
一、开始场景
[img][/img]


可以知道,这个开始场景其实我们还可以它细分问为三个重要的部分
a.下面动态的地面
b.上下飞扬的小鸟,其实我们看到的这个小鸟翅膀挥动的效果是有三张图片组成的,这也需要有线程来控制间断显示不同的图片
c.剩下的就是背景图了,这都很简单,但这里要说的是地面和后面天空的图是分开的,不是同一张图,还有就是只要双击游戏面板就能进入游戏了,因为我给面板添加了监听
我觉得这个场景的核心代码是:
[img][/img]



二、具体的小鸟
这里我用了一个showMe()方法,这样先把小鸟画了出来,我们可以最后在游戏的主面板上调用这个showMe()方法,当然这个类里面还有获取小鸟当前坐标的方法和鼠标监听改变小鸟坐标的方法
[img][/img]



三、水管类
水管的类主要就是解决下面的几个问题
a.如何随机出上面的水管和根据上水管的位置而确定下水管的为位置(需要注意的是这个随机产生的随机数应该写在构造方法里面的,我的方法是用一个数组来保存这些随机的数据,当然现在我这种方法是所有水管的位置度已经确定了,不过还有别的办法就是水管出现一个就出现一个,个人认为第二种办法更好,不过我现在用的是第一种,这种办法应该会比较耗内存)
[img][/img]


[img][/img]


b.获取所有水管的坐标(这里可以看出来,水管的坐标是用一个数组来保存的,所以要把整个数组都传到判断的类里面)
[img][/img]



四、判断游戏是否结束和计算分数
这个问题在把各个对象抽象成一个类的时候就已经变得很好解决了,前面已经把小鸟的坐标和水管的坐标都传到判断游戏是否结束这个类里面来了
可是我们应该用什么办法去判断呢?当然,既然是线程的学习,我还是用到了线程, 在小鸟和水管还没在同一个纵轴线的时候我先让这个线程睡一定的时间,当然这个一定的时间是要经过计算出来的,我们知道小鸟的初始位置,小鸟的横坐标不变,水管的纵坐标改变,还知道水管的移动速度,所以就能算出这段时间该让线程睡多长的时间了;紧接着的判断都是一样的,因为相邻的两个水管之间的间距是一定的,所以没个多长时间久判断一次就可以了,还有一点比较重要的就是如果就只判断一次肯定结果是不准确的,所以我们要在小鸟在水管经过的那一段时间都持续地判断。分数也就简单了,我说的简单是因为我哈没用到数据库的知识去保存这些游戏的分数,而是紧紧把游戏分数显示出来而已
具体代码:[img][/img]


[img][/img]



五、游戏结束场景
其实这个和游戏开始差不多的了

总体做出来的效果图:
[img][/img]


[img][/img]


[img][/img]




  • 大小: 38.5 KB
  • 大小: 52.9 KB
  • 大小: 61.1 KB
  • 大小: 20.6 KB
  • 大小: 49.5 KB
  • 大小: 13.8 KB
  • 大小: 55.1 KB
  • 大小: 66.9 KB
  • 大小: 38.5 KB
  • 大小: 37.3 KB
  • 大小: 44.2 KB
分享到:
评论

相关推荐

    Flappy-Bird-for-Android:android版flappy bird,代码架构清晰,可扩展性强

    总的来说,"Flappy-Bird-for-Android"不仅是一个有趣的游戏,也是一个高质量的教学资源。通过对该项目的深入研究,开发者可以提升自己的Android编程技巧,了解优秀代码架构的设计原则,并掌握如何打造一个扩展性强、...

    小游戏:基于Java Swing实现的FlappyBird游戏.zip

    《基于Java Swing实现的FlappyBird游戏:深入解析与学习指南》 在计算机科学的世界里,游戏开发是一项既富有挑战性又充满乐趣的任务。对于学习Java编程的学生来说,使用Java Swing构建小型游戏如FlappyBird,是提升...

    FlappyBird源代码

    总结来说,FlappyBird源代码的学习不仅能帮助我们理解Java编程和Eclipse IDE的使用,还能让我们深入掌握游戏开发的基本原理和技巧。通过这个项目,开发者可以提升对图形编程、事件处理、物理模拟等领域的理解,为...

    FlappyBird_Java

    总之,《FlappyBird_Java》这个游戏项目涵盖了Java编程的基础知识,如面向对象编程、图形绘制、事件处理、碰撞检测以及多线程编程。对于初学者来说,这是一个很好的实践平台,可以帮助他们将理论知识应用到实际项目...

    Flappy-Bird:游戏

    在这个Flappy-Bird-master压缩包中,我们可以看到一个用Java语言实现的Flappy Bird克隆版,下面将深入探讨其中的技术细节和知识点。 首先,Java是这款Flappy Bird克隆版的主要编程语言,它是一种广泛应用于移动应用...

    FlappyBird小游戏的Java版.zip

    《FlappyBird小游戏的Java版》是一个以Java编程语言实现的经典小游戏,深受程序员和游戏爱好者的喜爱。这个项目提供了一个完整的、可以直接运行的游戏环境,旨在让学习者了解和掌握Java编程语言在游戏开发中的应用。...

    一个支持多人游玩的Flappy_Bird变种游戏, Java编写.zip

    总结,这个Java编写的多人Flappy_Bird游戏项目涵盖了Java基础、图形界面设计、多线程编程、网络通信、游戏逻辑等多个重要知识点,对于提升Java编程技能和理解游戏开发流程具有极大的价值。无论是作为毕业设计还是...

    FlappyBird安卓源码

    FlappyBird,这款简单却又极具挑战性的游戏,曾经风靡全球,它的成功不仅在于游戏本身的趣味性,更在于其简单的代码结构,为开发者提供了宝贵的自学资源。本篇文章将深入探讨FlappyBird的安卓开发源码,帮助初学者...

    java实现Flappy Bird游戏源代码

    "java实现Flappy Bird游戏源代码" 本文主要讲解了使用Java语言实现Flappy Bird游戏的源代码,提供了一个完整的游戏示例代码,供有兴趣的读者参考。下面是相关知识点的总结: 1. Java基础知识:在这个示例代码中,...

    FlyBird源码JAVA

    【FlyBird源码JAVA】项目是一个使用JAVA编程语言编写的GUI游戏,其灵感来源于经典的小鸟飞行游戏"Flappy Bird"。在这个项目中,开发者手工编写了所有代码,展现了其在JAVA图形用户界面(GUI)设计和游戏逻辑实现上的...

    FlappyBird:用 Java 编写的飞扬的鸟

    开源的FlappyBird-master项目为开发者提供了扩展游戏功能的机会,例如添加新的游戏模式,或者通过网络实现多人对战。同时,通过对代码进行性能优化,可以提升游戏的流畅度和响应速度。 总之,通过分析和理解这个...

    flapflapbird:Java中Flappy Bird的桌面克隆

    这次我们要探讨的是一个名为“flapflapbird”的项目,它是对著名手机游戏《Flappy Bird》的Java实现,让我们一起深入了解一下这个项目的细节。 首先,我们要理解《Flappy Bird》这款游戏的基本机制。它是一款2D像素...

    JAVA 像素鸟游戏

    FlappyBird_shh4这个文件可能是项目源码的一部分,包含了游戏的主要实现代码。通过阅读和分析这个文件,我们可以深入了解游戏的内部工作机制,学习如何将JAVA语言应用于游戏开发,从而提升自己的编程技能和游戏设计...

    flappybird:流行的独立拍打鸟游戏的类似模拟。这些代码是从在线模板开发的

    本项目名为"flappybird",是一个基于Java语言的Flappy Bird的模拟器,开发者通过在线模板进行二次开发,旨在帮助学习者理解游戏开发的基本原理,以及Java编程技术。 一、游戏开发基础 1. 游戏循环(Game Loop):...

    用Java写的一个小游戏,就是和手游上的Flyppy Bird类似的游戏....zip

    在本项目中,开发者使用Java编程语言实现了一个类似于流行手游《Flappy Bird》的小游戏。这个项目展示了如何利用Java的基本语法、面向对象编程以及游戏开发的一些核心概念来创建一个交互式的娱乐应用。以下是对该...

    基于java swing开发的小游戏.zip

    游戏名为“Fly-Bird-Game”,我们可以推测它可能是一款类似于经典游戏"Flappy Bird"的小游戏,玩家需要操控一只小鸟避开障碍物,尽可能飞行得更远。在源码中,开发者可能运用了线程和定时器来实现游戏的动态更新,...

    FlappyBird_LWJGL:用LWJGL制作的飞扬的鸟游戏

    FlappyBird_LWJGL是一款基于 Lightweight Java Game Library (LWJGL) 开发的经典游戏——飞扬的鸟的复刻版。LWJGL 是一个为Java开发者提供的高性能游戏开发库,它提供了对OpenGL、OpenAL和OpenCL的低级访问,使得...

    fllapy bird 自己写的,效果和原app一样

    2. **游戏框架与编程语言**:由于Flappy Bird是一款2D游戏,开发者可能使用了如Unity、Cocos2d-x或者Unity引擎等游戏开发框架。此外,Android开发通常采用Java或Kotlin语言,考虑到描述中没有明确提及,我们假设这里...

    MaterialBird:几乎所有 Android 版本上的 Flappy Bird 材料设计版本

    总的来说,MaterialBird 是一个将经典游戏 Flappy Bird 与现代设计语言材料设计相结合的项目,展示了如何利用 Java 和 Android 平台特性来实现这一目标。对于开发者来说,这是一个学习材料设计、Android 游戏开发和 ...

Global site tag (gtag.js) - Google Analytics