一、写在前面:
《飞扬的小鸟》是一款曾经比较火热的小游戏,本文可以带你你从零开始,一步一步的开发出这款小游戏。
-
语言
Java -
工具
IntelliJ IDEA,JDK 16 -
准备工作
创建好项目后,在正式开始编写代码前,先下载游戏素材放入正确的目录下。开发过程中使用的一些参数,如坐标、尺寸、速度等,你可以直接使用这些参数值,也可以尝试自定义这些参数值。
二、知识要点
- Java的基本语法
- Java面向对象的三大特征(封装、继承、多态)
- Java Swing中常见API的使用 (Swing 包括了图形用户界面器件如:文本框,按钮,分隔窗格和表。)
- 鼠标监听
- IO流
- 线程
三、开发步骤简介
- 创建项目flappyBird,然后在src目录下创建两个包,分别为game和resources
- 将素材文件全部放入resources文件中
- 在测试类文件中,制作窗口面板,并将背景图片放入面板中
- 设计游戏道具之「地面」,新建地面类,实现游戏背景中地面的移动
- 设计游戏道具之「柱子」,新建柱子类,实现游戏背景中柱子的移动
- 设计游戏道具之「小鸟」,新建小鸟类,在类中加入小鸟的各种参数,以及飞行、移动、是否撞柱子和地面等相关的方法
- 将小鸟也放入面板中,用数组模拟多帧
- 鼠标监听控制小鸟的飞行行为
- 添加计分和游戏结束游戏开始的画面
由上述的分析,我们计划创建4个类:
- 小鸟类:设置小鸟参数,添加小鸟判断方法
- 柱子类:设置柱子参数,添加柱子移动方法
- 地面类:设置地面参数,添加地面移动方法
- 测试类:绘制游戏界面、添加开始结束、鼠标监听等方法
四、项目代码
注: 代码相关的解释都在代码注释中
1、绘制面板,并将背景图片放置面板中
在game包下面创建测试类BirdGame,并写入以下代码。
注:抛出的异常IDEA都可以直接点击加入,而不用自己写。
package game;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
// 游戏界面
public class BirdGame extends JPanel {
// 背景图片
BufferedImage background;
// 初始化游戏
public BirdGame() throws Exception {
// 初始化背景图片
background = ImageIO.read(getClass().getResource("/resources/bg.png"));
}
// 绘制界面
public void paint(Graphics g) {
// 绘制背景
g.drawImage(background, 0, 0, null);
}
// 启动方法
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame(); // 创建窗口,JFrame是屏幕上window的对象,能放大、缩小、关闭。
BirdGame game = new BirdGame();
frame.add(game);
frame.setSize(440, 670);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口
frame.setVisible(true); // 显示窗口
}
}
可以运行mian方法,来查看下效果。
2、设计游戏道具之地面
在game包下面定义地面类,并写入以下代码:
package game;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
class Ground {
BufferedImage image; // 图片
int x, y; // 位置
int width, height; // 宽和高
// 初始化地面
public Ground() throws IOException {
image = ImageIO.read(getClass().getResource("/resources/ground.png"));
width = image.getWidth();
height = image.getHeight();
x = 0;
y = 500;
}
// 地面向左移动
public void step(){
x--;
if(x == -109){
x = 0;
}
}
}
3、设计游戏道具之柱子
在game包下面定义柱子类,并写入以下代码:
package game;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
class