1.前言
首先,我先说一下这个项目,这个项目题材的来自牛客网的开源项目
我在这里做一个我自己在开发此项目的心得体会和经验交流,并且带领大家了解从0去入手一个项目的完整思路
这里是结果展示图:
2.分析
①素材准备
在开发此项目之前,我们需要去先下载一些关于飞翔的小鸟素材图片
小鸟的飞翔图片
地面背景图片
柱子图片
以及开始结束图片
那么这里我为大家提供百度网盘链接,大家需要可自行下载
链接:https://pan.baidu.com/s/12ww0HQ6KluVP-fcC40iXXQ
提取码:zjd8
复制这段内容后打开百度网盘手机App,操作更方便哦
②代码构思
本项目主要针对JAVASE刚学完想巩固练习,却没有项目着手的同学,用的都是一些基础性的知识
运用到的知识点:
1.面向对象:封装继承多态
2.数组
3.常用类Math
4.swing组件:图形界面工具
5.鼠标监听
6.IO流
7.多线程
逻辑步骤分析:
1.先实现窗口的制作,并且将背景图放入窗口面板
2.设计地面类,实现游戏背景地面移动
3.设计柱子类,实现游戏背景柱子移动
4.设计小鸟类,在类中添加小鸟相关方法
初始化小鸟相关参数, 判断小鸟是否碰撞柱子与地面
5.把小鸟放在面板中
6.鼠标监听控制小鸟飞行的轨迹
7.添加计分和游戏结束游戏开始的画面
代码分类:
由上述的分析,我们可以大致分析计划创建4个类
1.小鸟类:设置小鸟参数,添加小鸟判断方法
2.柱子类:设置柱子参数,添加柱子移动方法
3.地面类:设置地面参数,添加地面移动方法
4.测试类:添加开始结束、鼠标监听等方法
3.代码实现及展示
代码中数学参数来自牛客网测试
①小鸟类:
package FlyBirdGame;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
class Bird {
//图片
BufferedImage image;
//位置
int x,y;
//宽,高
int width,height;
//大小
int size;
//重力加速度
double g;
//位移的间隔时间
double t;
//最初上抛速度
double v0;
//当前上抛速度
double speed;
//经过时间t后的位移
double s;
//小鸟的倾角
double alpha;
//一组图片,记录小鸟的动画帧
BufferedImage[] images;
//动画帧数组的下标
int index;
//初始化小鸟
public Bird() throws Exception{
//初始化基本参数
image = ImageIO.read(new File("0.png"));
width = image.getWidth();
height = image.getHeight();
x=132;
y=280;
size =40;
//初始化位移参数
g=4;
v0=20;
t=0.25;
speed = v0;
s = 0;
alpha = 0;
//初始化动画帧参数
images = new BufferedImage[8];
for(int i = 0;i<8;i++){
images[i] = ImageIO.read(new File(i+".png"));
}
index = 0;
}
//飞行动作(变化一帧)
public void fly(){
index++;
image = images[(index/12)%8];
}
//移动一步
public void step(){
double v0 =speed;
//计算上抛运动位移
s=v0*t + g*t*t/2;
//计算小鸟的坐标位置
y=y-(int)s;
//计算下次移动速度
double v = v0 -g*t;
speed = v;
//计算倾角
alpha = Math.atan