Java之编写FlyBird小游戏

article/2025/9/29 19:25:50

Java小游戏编写(飞翔的小鸟🐦)

概述:主要使用面向对象,线程,继承、ImageIO流等完成的一个小游戏
主要文件:


🐅🎉🐅🎉🐅🎉🐅🎉🐅🎉🐅🎉🐅🎉🐅🎉🐅🎉🐅🎉🐅🎉🐅🎉🐅


  • GrameJFrame类~游戏窗体
  • GrameJPanel类~游戏画布(重点)
  • Bird类~游戏主角
  • Ground类~游戏内地面
  • Column类~游戏内柱子障碍物
  • Tools类~自己为导入图片定义的工具类

🐦游戏整体大概思维框架(自制,如有纰漏还请包涵):
在这里插入图片描述


🐦游戏效果🐦
在这里插入图片描述


🎁一、GameJFrame类的具体描述

♥GameJFrame♥:
public class GameJFrame extends JFrame {//构造器(作用是用来做初始化操作)public GameJFrame(){//设置尺寸setSize(430,650);//设置关闭窗体的同时终止程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置标题setTitle("FlyBird");//设置窗体居中显示setLocationRelativeTo(null);//设置窗体大小不能改变setResizable(false);}//程序启动的入口public static void main(String[] args) {//创建窗体对象GameJFrame frame = new GameJFrame();//创建画板对象GameJPanel panel = new GameJPanel();//向窗体中添加画板frame.add(panel);//显示窗体对象frame.setVisible(true);//启动游戏
//		panel.start();}

🎁二、GameJPanel类的具体描述

♥GameJPrame♥:

具体划分:

⭐ - 声明游戏所需要的对象

public class GameJPanel extends JPanel {//声明一个图片类型的变量BufferedImage bg;//游戏背景图片对象声明BufferedImage bgstart;//游戏开始背景声明//声明地面对象的变量Ground ground;//声明柱子对象Column column1;                      Column column2;//声明鸟对象Bird bird;//声明游戏状体(开始)boolean gameStart;//游戏结束的状态boolean gameOver;//分数int score;·······················略·······················}

⭐ - 画布构造器:public GameJPanel(){}

 //画板构造器public GameJPanel(){bg = Tool.getImg("../img/bg.png"); //设置背景图片bgstart=Tool.getImg("../img/start.png");ground = new Ground();    //初始化地面对象column1 = new Column(1);        //初始化柱子对象column2 = new Column(2);bird = new Bird();        //初始化鸟对象gameStart = false;        //初始化游戏状态gameOver = false;score = 0;        //初始化分数//鼠标监听器MouseAdapter adapter = new MouseAdapter() {//监听鼠标单击事件@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);
//				System.out.println("点了我一下");if(gameStart == false){//准备状态//将状态更改为启动状态gameStart = true;//运行游戏start();}else if(gameOver){//结束状态gameStart = false;gameOver = false;//将有所对象初始化ground = new Ground();column1 = new Column(1);column2 = new Column(2);bird = new Bird();score = 0;                    //分数归零repaint();//刷新}else{bird.moveUp();                    //小鸟的上抛}}};this.addMouseListener(adapter);        //将监听器添加到适配器中

⭐ - public void start(){} 游戏的启动方法

//游戏启动的方法public void start(){//启动线程MyThread thread = new MyThread();Thread t = new Thread(thread);t.start();//将线程纳入线程调度}

⭐ - class MyThread implements Runnable{} 创建线程

 //创建线程class MyThread implements Runnable{//该线程要执行的内容就写入到run方法中@Overridepublic void run() {while(true){//地面移动ground.move();//柱子移动column1.move();column2.move();//小鸟飞bird.fly();//小鸟移动bird.move();//检测鸟是否与地面或顶部发生碰撞boolean boo = bird.hit(ground);//检测鸟是否碰到柱子boolean boo1 = bird.hit(column1);boolean boo2 = bird.hit(column2);if(boo || boo1 || boo2){//修改游戏状体结束gameOver = true;break;//结束游戏}//判断是否安全通过if(bird.x == column1.x+column1.w|| bird.x == column2.x + column2.w){//得分score++;}try {//线程休眠  根据得分线程的休眠时间越短,游戏速度会越来越快if (score<5) {Thread.sleep(25);}if (score>4&score<10) {Thread.sleep(20);}if (score>9&score<15) {Thread.sleep(15);}if (score>14&score<20) {Thread.sleep(10);}if (score>19) {Thread.sleep(7);}//刷新repaint();} catch (InterruptedException e) {e.printStackTrace();}}}}

⭐ - 重写画笔pubic void paint(Graphics g){}

@Override
public void paint(Graphics g) {super.paint(g);//画背景图g.drawImage(bg,0,0,null);//画柱子g.drawImage(column1.img,column1.x,column1.y,column1.w,column1.h,null);g.drawImage(column2.img,column2.x,column2.y,column2.w,column2.h,null);//画地面(图片,原点x坐标,原点y坐标,所画的宽度,所画高度,null)g.drawImage(ground.img,ground.x,ground.y,ground.w,ground.h,null);//画鸟g.drawImage(bird.img,bird.x,bird.y,bird.w,bird.h,null);//画游戏准备状态的图片if(gameStart == false){g.drawImage(bgstart,0,0,440,650,null);}//画游戏结束状态的图片if(gameOver){g.drawImage(Tool.getImg("../img/gameover.png"),0,0,null);}//设置字体大小Font f = new Font("楷体",Font.BOLD,26);//将画笔设置为指定的字体g.setFont(f);//设置画笔颜色g.setColor(Color.ORANGE);//画分数g.drawString("分数: " + score, 5, 35);}

🎁三、Bird类的具体描述

♥Bird♥:
/*** 鸟类*/
public class Bird {//图片BufferedImage img;//宽度//高度 //x坐标   //y坐标int w,h,x,y;//声明集合对象List<BufferedImage> list;//初速度//时间间隔 //距离 //重力double v0,t,s,g;//构造器做初始化操作public Bird(){//初始化集合list = new ArrayList();//循环将图片装入到集合中for(int i = 0;i<8;i++){//1+2+"123"+1+2+"3"list.add(Tool.getImg("../img/"+i+".png"));}//初始化图片img = Tool.getImg("../img/0.png");//初始化宽度w = img.getWidth()/3;//初始化高度h = img.getHeight()/3;//初始化xx = 120;//初始化y;y = 150;//初始化初速度v0 = 3;//初始化时间间隔t = 0.15;//初始化距离s = 0;//初始化重力g = 5;}//小鸟翅膀飞的方法int i = 0;public void fly(){img = list.get(i%list.size());i++;}//小鸟动的方法public void move(){//计算上抛的距离s = v0*t;//计算出最高点的y坐标y = y - (int)s;//计算运动时间t以后的速度double v2 = v0 - g*t;//时间t以后的速度就是下落时的初速度v0 = v2;}//小鸟上抛的方法public void moveUp(){v0 = 20;}//鸟与顶部或底部发生碰撞public boolean hit(Ground ground){if(y <= 0 || y >= ground.y-h){return true;//撞了}return false;//没撞}//鸟和柱子的碰撞public boolean hit(Column column){if(x >= column.x-w && x < column.x + column.w){if(y > column.h/2 + column.y - column.gap/2&& y < column.h/2 + column.y + column.gap/2-h){return false;//安全通过}return true;//撞到了}return false;}
}

🎁四、Ground类的具体描述

♥Ground♥:
/*** 地面类*/
public class Ground {//地面的图片BufferedImage img;//地面的宽度//地面的高度//地面原点x坐标 //地面原点y坐标int w,h,x,y;//地面的构造器public Ground(){//读取地面图片img = Tool.getImg("../img/ground.png");//获取图片的宽度w = img.getWidth();//获取图片的高度h = img.getHeight();//初始化x坐标x = 0;//初始化y坐标y = 644-146;}//地面移动的方法public void move(){x--;//每次减一if(x<=-350){x = 0;}}
}

🎁五、Column类的具体描述

♥Column♥:
//定义一个柱子类
public class Column {//图片BufferedImage img;//宽度 //高度  //x坐标//y坐标 //间距int w,h,x,y,distance;//随机数对象(随机柱子)Random ran;//安全间隙(柱子之间的空隙)int gap;//构造器做初始化操作public Column(int i){//初始化图片if (i==1) {img = Tool.getImg("../img/column.png");}if (i==2) {img = Tool.getImg("../img/column.png");}//初始化宽度w = img.getWidth()/3;//初始化高度h = img.getHeight()/2;//初始化间距distance = 250;//初始化安全间隙gap = 74;//初始化xx = 300 + distance*(i-1);//令柱子之间间隔300//初始化随机数对象ran = new Random();//初始化y坐标//0 ~ -(h - (650-146))之内随机y = -ran.nextInt(h - (650-146)+1);//0~(n-1)之间的随机正整数,随机柱子的高低}//柱子移动的方法public void move(){x--;if(x <= -w){x = 2*distance-w;y = -ran.nextInt(h - (650-146)+1);}}
}

🎁六、Tools工具类的具体描述

♥Tools♥:
/*** 工具类,为重复的导入图片提供便捷,于是创建了这个工具类*/
public class Tool{//通过路径获取图片public static BufferedImage getImg(String path){//声明一张图片,初始化为null;BufferedImage img = null;//获取图片try {img = ImageIO.read(Tool.class.getResource(path));} catch (IOException e) {e.printStackTrace();}return img;}
}

🎁至此!完工🎉🎉,以上是全部代码!以及代码的解释,如需源码及其素材直接到资源里自行下载😜🎉🎉


http://chatgpt.dhexx.cn/article/OTCCBNhZ.shtml

相关文章

介绍一款2023年新出的mysql管理工具: FlyBird Database Manager

FlyBird Database Manager 介绍 FlyBird Database Manager 是一款mysql 界面化管理工具&#xff0c; 使用go语言编写&#xff0c;天然支持Windows, MacOS, Linux等主流平台。 提供无需安装的命令行版本&#xff0c; 命令行中启动服务&#xff0c;以html支持UI界面,在浏览器中…

网络打印机无法连接的解决方法

&#xfeff;&#xfeff; 网络 打印机无法连接的解决方法。 1、首先确定计算机是否可以连接网络打印机&#xff0c;网络打印机都会有一个内网ip地址&#xff0c;可以先ping一下看通不通&#xff0c;如果不通说明计算机与网络打印机之间线路不通&#xff0c;可以用排除法看看是…

win10 系统连接不到网络打印机

查看其它同事的网上邻居里可以看到内容&#xff0c;但 本机空空如也&#xff01; 解决方法&#xff1a;打开控制面板&#xff1a;如下图所示&#xff1a;1&#xff1a;“程序“”->2&#xff1a;“启用或关闭windows功能“->3&#xff1a;勾选"SMB 1.0/CIFS文件共享…

windows10突然连不上打印机问题

问题描述 windows10打印机突然连接不上了&#xff0c;出现了错误&#xff1a; Active Directory 域服务当前不可用。 解决方案 在cmd中输入 services.msc 找到 发现这个服务没有运行&#xff0c;点击运行按钮&#xff0c;出现错误信息&#xff1a; win10错误0x800706b9…

共享网络打印机连接,以及解决无法连接打印机的问题

win10共享网络打印机&#xff0c;及连接打印机 1.共享2.连接补充一点 1.共享 打开WIN的远程连接。&#xff08;一方面是为了能方便使用远程桌面&#xff0c;这个以后会写到&#xff09;——我的电脑—右键—属性—远程设置。把两个都选上。然后搜索栏输入‘打印机’&#xff0…

解决:Win11无法连接网络打印机

&#xff08;一&#xff09;打开本地组策略。 1.1 按winR键盘组合键打开“运行”。在运行框中输入 “gpedit.msc”&#xff0c;回车键。 1.2 “开始”菜单中搜索&#xff1a;组策略&#xff0c;然后出现【编辑组策略】&#xff0c;点击进入。 &#xff08;二&#xff09;管理模…

关于Windows11无法连接打印机

刚买的W11电脑&#xff0c;发现办公室的共享打印机连接不了&#xff0c;显示无法连接。也看了很多解决办法&#xff0c;都没能解决。 然后发现了可能是W11家庭版的问题&#xff0c;微软系统更新后&#xff0c;就是会存在打印机连接不上的问题。这个网址就可以解决以上的问题。…

Win10无法连接打印机怎么办?不能使用打印机的解决方法

在我们平常的办公中&#xff0c;经常会需要使用到打印机打印文件。想要使用打印机是需要先将电脑与打印机连接的&#xff0c;但是有部分Win10用户遇到了无法连接打印机的情况&#xff0c;对于这种情况应该如何解决呢&#xff1f;下面来看看详细的操作方法吧&#xff01; Ghost…

Win11 22H2共享打印机连不上怎么办?

Win11 22H2共享打印机连不上怎么办&#xff1f;有用户使用电脑的时候&#xff0c;需要去进行打印机的连接&#xff0c;但是在连接的过程中&#xff0c;却出现了无法连接的情况。那么遇到这个问题之后怎么去进行解决呢&#xff1f;一起来看看以下的解决方法分享吧。 解决方法&am…

windows无法连接到打印机?三个方法连接打印机(Win10系统)

在日常办公中&#xff0c;我们经常会用到打印机。一般情况下&#xff0c;打印机要与电脑连接才可以使用。有很多用户反馈&#xff0c;windows无法连接到打印机&#xff0c;这是怎么回事呢&#xff1f;请看文章是如何解决打印机无法连接到计算机的问题&#xff01; 操作环境&…

“windows无法连接到打印机”问题的解决

转载请注明出处&#xff1a;http://blog.csdn.net/dongdong9223/article/details/62045759 本文出自【我是干勾鱼的博客】 经常会出现“windows无法连接到打印机”这样的错误&#xff1a; 其实这是因为print spooler 自动关闭导致的&#xff0c;进入&#xff1a; 控制面板 -&…

windows无法连接到打印机

项目场景&#xff1a;windows无法连接到打印机 windows无法连接到打印机。本地打印后台处理程序服务没有运行。请重新启动打印机后台处理程序或重新启动计算机 问题描述 解决方案&#xff1a; 搜索服务&#xff0c;点击打开 搜索Print Spooler 查看状态是否运行&#xff0c;…

计算机无法连接打印机主机,电脑主机连不上网络打印机

其实网络打印机是一种智能型网络设备&#xff0c;它能够通过多种网络环境为大批用户提供打印服务。下面是学习啦小编为大家整理的关于电脑主机连不上网络打印机&#xff0c;一起来看看吧! 电脑主机连不上网络打印机 要解决无法连接的问题&#xff0c;我们要先将打印机取下在重新…

Win11无法连接打印机?Win11电脑无法连接打印机的解决方法

Win11无法连接打印机&#xff1f;近期有部分Win11用户在使用打印机时出现了电脑无法连接打印机的情况&#xff0c;导致无法正常打印&#xff0c;这是怎么回事呢&#xff1f;那么有没有什么办法恢复呢&#xff1f;下面小编就给大家分享一下详细的解决方法&#xff0c;有需要的朋…

安装打印机驱动仍连接不了打印机

打印机驱动安装了&#xff0c;但是使用打印机时却识别不了。很有可能是没有启动“Print Spooler” 打开【计算机管理】&#xff0c;点击左边的菜单栏的【服务】&#xff0c;找到【Print Spooler】并右键启动

计算机ip无法连接打印机,网络打印机无法连接的原因与解决办法-电脑故障

现在网络打印机很普及&#xff0c;我也接触过几款网络打印机&#xff0c;也遇到类似网络打印机无法打印这样的故障&#xff0c;下面是我总结网络打印机无法连接(打印机共享怎么设置)的解决方法&#xff0c;希望对大家有帮助&#xff1a; 1、首先确定计算机是否可以连接网络打印…

计算机无法连接到打印机主机,电脑连接不上打印机怎么办

我们工作的时少不了使用打印机&#xff0c;可是出现打印机无法连接是怎么回事呢?电脑连接不上打印机怎么办呢?小编为大家介绍一下解决电脑连接不上打印机的具体操作步骤&#xff0c;下面大家跟着学习啦一起来了解一下吧。 电脑连接不上打印机解决方法 第一步&#xff1a;如果…

Windows无法连接到打印机怎么办?快收藏这些正确做法!

案例&#xff1a;Windows无法连接到打印机怎么办&#xff1f; “朋友们朋友们&#xff0c;最近为了备考国考&#xff0c;我特地买了个打印机回来打印资料&#xff0c;但是我的Windows无法连接到打印机&#xff0c;这是为什么呢&#xff1f;有没有知道Windows应该怎么连接打印机…

HP打印机连不上解决办法

1.出现这种问题大部分跟驱动相关&#xff0c;重新下载安装驱动即可 2.来到打印机wifi网址 3.点击手册/驱动程序&#xff0c;选择这个 4.选择驱动&#xff0c;download下载 5.运行exe程序&#xff0c;连接打印机。安装驱动&#xff0c;一直下一步&#xff0c;打印测试页即可。…

Altium designer—STM32F103ZET6最小系统原理图

分享使用Altium designer软件绘制的STM32F103ZET6最小系统电路原理图 亲测可用&#xff0c;完整电路文件见文末链接。 附完整下载链接 CSDN下载 https://download.csdn.net/download/u011816009/85841967 百度网盘下载 链接&#xff1a;https://pan.baidu.com/s/1TIQtk4mlUP…