用Java实现的小游戏flappyBird(附源码)

前言

以前用Java写了写了一个飞翔的小鸟,但是由于本人水平有限,代码写得可能有点啰嗦,仅供各位大佬参考。

运行效果

在这里插入图片描述
在这里插入图片描述

细节实现

  1. 界面
    界面主要采用JLabel类显示图片,图片分层由JLayeredPane类管理。JLayeredPane分层:

    最底层为Default层,最高层为Drag层,层级高的组件覆盖层级低的组件。

  2. 游戏逻辑
    每一游戏时刻(tick,30ms)的任务执行主要由ScheduledExecutorService类实现。
    管子:一对管子由上下两根组成,上下管子、两对管子之间的间隔随机生成,这里采用Random类的nextInt(int bound)方法实现,此方法随机生成[0,n)区间内的任意整数。管子对象由List存储,并将管子数量做出限制,当数量已达最大则不再生成,管子左移出界面后做删除操作。
    小鸟的移动: 每tick将管子左移xspeed个像素模拟小鸟向右飞,通过控制小鸟的Y轴坐标实现向上飞和下落,Y轴增大则小鸟下落,反之上升。将向下定为速度yspeed正方向,每tick将小鸟Y轴值增加yspeed个像素,并将yspeed增大g个单位,模拟重力。
    小鸟的跳跃:给背景注册监听器,当鼠标点击时将yspeed置为负来模拟跳跃。
    小鸟的死亡:每tick遍历管子List,找到小鸟通过过中的管子,若找到则判定是否碰撞。

				if(!(this.y>passing.Pipe_down.getIconHeight()+passing.y
						&&this.y+this.currentImage.getIconHeight()<
						passing.Pipe_down.getIconHeight()+passing.y+passing.ySpace))

在这里插入图片描述
小鸟的计分:将计分作为成员变量,每个管子左移出画面后计分加1,当小鸟死亡后再将位于小鸟左侧的管子数加到计分内。每局计分用TreeSet存储,根据顺序决定奖牌种类。

大概思路就是这样,下面是完整代码和资源

完整代码

链接:百度云盘链接
提取码:gse8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值