前言
基于Java的飞翔小鸟游戏,本代码来自b站up主分享。本游戏所需的图片素材需要自己获取并下载,在此视频下,视频链接:【Java经典小游戏项目之飞翔的小鸟】 https://www.bilibili.com/video/BV1ou411o7br/?p=10&share_source=copy_web&vd_source=4611ec45767280678018f593c547e388。
启动入口
package com.bird.app;
import com.bird.main.GameFrame;
public class GameApp {
public static void main(String[] args) {
new GameFrame();
}
}
主类
游戏主窗口类
package com.bird.main;
import static com.bird.util.Constant.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
/**
* 游戏的主窗口类,所有的关于游戏中绘制的内容都在此类中完成。
*/
public class GameFrame extends Frame {
//实例化gamebackGround类
private GameBackGround gameBackGround;
//实例化Bird类
private Bird bird;
//实例化GameBarrierLayer类
private GameBarrierLayer gameBarrierLayer;
//实例化GameFrontGround类
private GameFrontGround gameFrontGround;
//存放图片的图片
private BufferedImage buffimg = new BufferedImage(FRAM_WIDTH,FRAM_HEIGNT,BufferedImage.TYPE_4BYTE_ABGR);
//构造方法中初始化一些参数
public GameFrame(){
//窗口是否可见
setVisible(true);
//窗口的大小
setSize(FRAM_WIDTH,FRAM_HEIGNT);
//窗口的标题
setTitle(FRAM_TITLE);
//窗口的初始化位置
setLocation(FRAM_X,FRAM_Y);
//窗口的大小不可改变
setResizable(false);
//窗口的关闭事件
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);//结束程序
}
});
//初始化游戏对象
initGamg();
new run().start();
//添加按键监听
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
add(e);
}
@Override
public void keyReleased(KeyEvent e) {
minu(e);
}
});
}
//对游戏中的对象初始化
public void initGamg(){
gameBackGround = new GameBackGround();
bird = new Bird();
gameFrontGround = new GameFrontGround();
gameBarrierLayer = new GameBarrierLayer();
}
class run extends Thread{
@Override
public void run() {
while (true) {
repaint();
try {
Thread.sleep(33);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* 所有的我们需要绘制的内容都在此方法中进行调用绘制
*/
@Override
public void update(Graphics g) {
if(bird.life){
//得到图片的画笔
Graphics graphics = buffimg.getGraphics();
gameBackGround.draw(graphics);
bird.draw(graphics);
gameFrontGround.draw(graphics);
gameBarrierLayer.draw(graphics,bird);
//一次性的将图片绘制到屏幕中
g.drawImage(buffimg,0,0,null);
}else {
String over = "游戏结束";
g.setColor(Color.red);
g.setFont(new Font("微软雅黑",1,60));
g.drawString(over,180,250);
String reset = "Space Reset Game";
g.drawString(reset,25,350);
}
}
//按键
public void add(KeyEvent e){
switch (e.getKeyCode()){
case KeyEvent.VK_UP:
bird.fly(1);
break;
case KeyEvent.VK_SPACE:
if (bird.life == false) {
restart();
}
break;
}
}
//抬键
public void minu(KeyEvent e){
switch (e.getKeyCode()){
case KeyEvent.VK_UP:
bird.fly(5);
break;
}
}
/**
* 重置游戏
*/
public void restart(){
gameBarrierLayer.restant();
bird.restartDraw();
}
}
游戏前景类
package com.bird.main;
import com.bird.util.Constant;
import com.bird.util.GameUtil;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 游戏的前景类
*/
public class GameFrontGround {
//云彩的个数
private static final int CLOUND_COUNT = 2;
//存放云彩的容器
private List
//云彩的飞行速度
private static final int CLOUNG_SPEED = 1;
//使用到图片资源
private BufferedImage[] img;
//用于产生随机数
private Random random;
// 构造器初始化数据
public GameFrontGround() {
clouds = new ArrayList<>();
img = new BufferedImage[CLOUND_COUNT