编程小白自学Java开发FlyBird小游戏

article/2025/9/29 17:33:37

本人在读大学生一枚,在上个月自学了半个月的Java,现在寒假放假有空闲时间,用三天肝爆出一款之前爆火的小游戏,FlyBird,用的是IDEA开发环境。

参考了B站代码帝国的教学思路,在面向对象和构造方法中花费了不少功夫。废话不多说,以下是代码实现(素材和游戏演示视频在代码后面):

package Game; 
//游戏入口主类
import java.io.IOException;public class GameBegin {public static void main(String[] dd) throws IOException{GameFrame frame= new GameFrame();frame.setVisible(true);GamePanel panel=new GamePanel();frame.add(panel);}}
package Game;
//小鸟类import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;public class Bird {BufferedImage img;int x;int y;int w;int h;//小鸟飞行轨迹double v0;double t;double s;double g;List<BufferedImage> list;public Bird(){img=Tools.getImg("../img/bluebird0.png");w=img.getWidth();h=img.getHeight();x=50;y=150;list=new ArrayList<BufferedImage>();for(int i=0;i<4;i++){list.add(Tools.getImg("../img/bluebird"+i+".png"));}v0=4;//初始化速度t=0.21;//时间s=0;//距离g=0.8;//重力}//鸟的翅膀动起来int index=0;public void fly(){if(index>=4){index=0;}img=list.get(index);index++;}//小鸟的落体运动public void move(){s=v0*t;y=(int)(y-s);double v2=v0-g*t;v0=v2;}//小鸟向上运动public void up(){v0=12;	}//小鸟与顶部碰撞或地面发生碰撞public boolean hittop(){if(y<=0||y>=559)return true;return false;}//小鸟和柱子之间发生碰撞public boolean hit(Column column){if(x>=column.x-w&&x<=column.x+column.w&&y>=column.y-h+1){return true;}return false;}}
package Game;import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;import javax.imageio.ImageIO;//柱子类
public class Column {BufferedImage img;int x;int y;int w;int h;int distance;Random ran=new Random();public Column(int i){img=Tools.getImg("../img/pipe1.png");h=img.getHeight();w=img.getWidth()/2;distance=245;x=300;if(i==1){x=300;}else if(i==2){x=300+distance;}y=ran.nextInt(601);while(true){if(y>200){break;}elsey=ran.nextInt(601);}}public void move() {if(x<=-50){x=418;y=ran.nextInt(601);while(true){if(y>200){break;}elsey=ran.nextInt(601);}}x--;}}
package Game;
//游戏窗口类
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.JFrame;public class GameFrame extends JFrame{public GameFrame(){setTitle("FlyBird");setSize(418,700);setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);try {setIconImage(ImageIO.read(this.getClass().getResource("../img/bird0.png")));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package Game;import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;//游戏结束类
public class GameOver {int x;//X sizeint y;//Y sizeBufferedImage img;int w;//W sizeint h;//H sizepublic GameOver(){img=Tools.getImg("../img/gameover.png");h=img.getHeight();w=img.getWidth();x=200;y=200;}//地面移动的方法public void move(){if(x<=-(w-402)){x=0;}	x--;}}
package Game;
//游戏面板类
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.JPanel;public class GamePanel extends JPanel{
BufferedImage bg;
Ground ground;//声明一个用于存放地面图片的变量。
Column column;//声明一个用于存放柱子图片的变量。
Column column2;//声明一个用于存放d第二根柱子图片的变量。
Bird bird;
boolean start;
boolean gameOver;
int score;
int best;public GamePanel(){//声明背景颜色setBackground(Color.white);//设置背景图片bg=Tools.getImg("../img/yourname.jpg");//初始化地面对象ground=new Ground();//初始化柱子对象column=new Column(1);//初始化第二根柱子对象column2=new Column(2);//初始化小鸟对象bird=new Bird();//初始化结束画面//初始化鼠标监听器MouseAdapter adapter=new MouseAdapter(){@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stubsuper.mouseClicked(e);if(start==false){start=true;start();}else if(gameOver){start=false;gameOver=false;bg=Tools.getImg("../img/yourname.jpg");//初始化地面对象ground=new Ground();//初始化柱子对象column=new Column(1);//初始化第二根柱子对象column2=new Column(2);//初始化小鸟对象bird=new Bird();//初始化结束画面score=0;repaint();}else {bird.up();}}};this.addMouseListener(adapter);
}//开始页面public void start(){MyThread mt=new MyThread();Thread t=new Thread(mt);t.start();}
@Overridepublic void paint(Graphics g) {// TODO Auto-generated method stubsuper.paint(g);g.drawImage(bg,0,0,null);g.drawImage(column.img,column.x,column.y,null);g.drawImage(column2.img,column2.x,column2.y,null);g.drawImage(ground.img,ground.x,ground.y,null);g.drawImage(bird.img,bird.x,bird.y,null);if(start==false)g.drawImage(Tools.getImg("../img/start3.png"),150,230,null);if(gameOver){g.drawImage(Tools.getImg("../img/gameover3.png"),90,200,null);Font b=new Font("宋体",Font.BOLD,30);g.setFont(b);g.setColor(Color.white);if(score>best){best=score;}g.drawString("最高纪录:"+best, 102, 300);}Font f=new Font("宋体",Font.BOLD,20);g.setFont(f);g.setColor(Color.LIGHT_GRAY);g.drawString("分数:"+score, 15, 30);}
class MyThread implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){ground.move();column.move();column2.move();bird.fly();bird.move();boolean bool=bird.hittop();boolean bool1=bird.hit(column);boolean bool2=bird.hit(column2);if(bool){gameOver=true;return;}if(bool1){gameOver=true;return;}if(bool2){gameOver=true;return;}if(bird.x==column.x+column.w||bird.x==column2.x+column2.w)score++;try {Thread.sleep(4);repaint();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();						}    	}}}}
package Game;import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;//地面类
public class Ground {int x;//X sizeint y;//Y sizeBufferedImage img;int w;//W sizeint h;//H sizepublic Ground(){img=Tools.getImg("../img/land.png");h=img.getHeight();w=img.getWidth();x=0;y=578;}//地面移动的方法public void move(){if(x<=-(w-401)){x=0;}	x--;}}
package Game;
//工具类import java.awt.image.BufferedImage;
import java.io.IOException;import javax.imageio.ImageIO;public class Tools {public static BufferedImage getImg(String path){BufferedImage img = null;try {img=ImageIO.read(Tools.class.getResource(path));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return img;		}}

以下是游戏体验视频的链接和素材图片:

游戏视频已上传B站:https://b23.tv/Eetb

游戏素材:


http://chatgpt.dhexx.cn/article/8UTYiTlQ.shtml

相关文章

java fly bird小游戏_java swing实现的小游戏flybird源码附带视频配置修改教程

大家好&#xff0c;今天给大家演示一下由Java swing实现的一款小游戏flybird&#xff0c;该游戏操作比较简单&#xff0c;点击鼠标确保小鸟不要触碰到柱子即可&#xff0c;该游戏可运行在Java环境下&#xff0c;jdk版本不限&#xff0c;下面我们来看看如何运行以及简单的修改游…

html+css+js实现小游戏flybird(完整版)

完整demo下载资源https://download.csdn.net/download/qq_30548105/10847675 从未做过前端的游戏&#xff0c;哪怕不是用引擎实现的小游戏也没做过&#xff0c;这次试了一下&#xff0c;参考了一些资料&#xff0c;资料也不是很完整&#xff0c;于是就自己补齐写了一个…

JS实现FlyBird

放假等毕业还是挺无聊的&#xff0c;正好闲着没事做就学了学JS&#xff0c;也算是重拾吧&#xff0c;照着视频写了一个&#xff0c;然后。。。视频源找不到了 1.环境和工具 windows10 WebStrom2018.1.4 测试直接用的webstrom里面的 2.运行截图 类似于这样&#xff0c;然后…

纯C语言编程-游戏之Fly Bird

基于纯C的小游戏&#xff0c;基本思想就是使用system("cls")和printf()函数不断刷新界面&#xff0c;捕获键盘事件&#xff0c;然后修改显示数组&#xff0c;并刷新界面。 之前有一款特别火爆的小游戏FlyBird&#xff0c;我们可以使用纯C语言实现&#xff0c;希望对…

飞翔的小鸟(FlyBird)游戏C语言编程(含撞柱子)

// 飞翔的小鸟.cpp #include "stdafx.h" #include <graphics.h> //图形库头文件 #include <stdlib.h> //Sleep #include <conio.h> //_getch()按键盘 #include <stdio.h> //C语言头文件 #include <time.h> //随机函数使…

【Unity】Fly Bird(游戏实战)(1)

对于Fly Bird 相信各位肯定不会陌生。&#xff08;在安卓5.0-7.0版本的系统中多次点击Android Version 就会出现这个游戏&#xff0c;快去试试吧~~ 7.0及以后就没有了~~就做不了示范了 ~~ 刚开始Unity&#xff0c;也是写的第一个游戏就是做一个Fly Bird. 先把用到的音频&…

Scratch(三十五):FlyBird

哈喽&#xff0c;大家好&#xff01;今天给大家展示的Scratch是FlyBird。接下来&#xff0c;我们一起看一下效果吧。 1、素材获取 2、bird的设置 当点击完小绿旗之后&#xff0c;bird就会有个上下浮动的控制&#xff0c;也就是变量“重力”的设置&#xff0c;接着就是开始位置…

Html5在线小游戏 在线玩压扁小鸟(flyBird)游戏源码

这个源码无需后台上传服务器&#xff0c;直接在线即可使用。 该游戏源码是基于HTML5和JavaScript开发的&#xff0c;运行在浏览器中&#xff0c;使得用户能够方便地进行游戏&#xff0c;而且不需要进行任何安装和下载操作。想要玩游戏的用户只需要访问指定链接即可开始游戏&am…

cocos游戏FlyBird

cocos creator游戏开发FlyBird 菜单界面Menu 首先建立一个场景&#xff08;scence&#xff09; 将你的背景图片添加入canvas并调整canvas的大小来适应你背景图片的大小&#xff0c;最好不要去图片大小&#xff0c;这样会使你的图片变得很丑 添加一个按钮控件 并给这个场景添…

java fly bird小游戏_JavaScript实现Fly Bird小游戏

3.1 小鸟 首先&#xff0c;创建小鸟的对象&#xff0c; bird.js 文件。 div:document.createElement("div"),showBird:function(parentObj) { this.div.style.width "40px"; this.div.style.height "28px"; this.div.style.backgroundImage &…

FLY BIRD

这是作品需要的角色…… 注:水管要多弄几个造型例如: (作者用的背景是blue sky(scratch素材库里面的)) 一下是水管的程序: 小鸟的也很简单:

Java之编写FlyBird小游戏

Java小游戏编写&#xff08;飞翔的小鸟&#x1f426;&#xff09; 概述&#xff1a;主要使用面向对象&#xff0c;线程&#xff0c;继承、ImageIO流等完成的一个小游戏 主要文件&#xff1a; &#x1f405;&#x1f389;&#x1f405;&#x1f389;&#x1f405;&#x1f389;…

介绍一款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…