JAVA小游戏“飞翔的小鸟”
第一步是创建项目 项目名自拟
第二步创建个包名 来规范class
再创建一个包 来存储照片
如下:

package game;
import java.awt.*;
import javax.swing.*;
import javax.imageio.ImageIO;public class Bird {Image image;int x,y;int width,height;int size;double g;double t;double v0;double speed;double s;double alpha;//֡Image[] images;int index;public Bird() throws Exception{image=new ImageIcon("source/0.png").getImage();width = image.getWidth(null);height = image.getHeight(null);x=132;y=280;size=40;g=4;v0=20;t=0.25;speed=v0;s=0;alpha=0;images=new Image[8];for(int i=0;i<8;i++){images[i]=new ImageIcon("source/"+i+".png").getImage();}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(s/8);}public void flappy(){speed=v0;}public boolean hit(Ground ground){boolean hit =y+size/2>ground.y;if(hit){y=ground.y-size/2;alpha=Math.PI/2;}return hit;}public boolean hit(Column column){if(x>column.x-column.width/2-size/2&&x<column.x+column.width/2+size/2){if(y>column.y-column.gap/2+size/2&&y<column.y+column.gap/2-size/2) return false;return true;}return false;}
}
package game;import javax.imageio.ImageIO;
import java.util.*;import javax.swing.*;import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import java.awt.*;public class BirdGame extends JPanel {Image background;Image startImage;Image overImage;Ground ground;//����Column column1,column2;Bird bird;int score;int state;//״̬//״̬����public static final int START=0;public static final int RUNNING=1;public static final int GAME_OVER=2;public BirdGame() throws Exception{background = new ImageIcon("./source/bg.png").getImage();startImage = new ImageIcon("./source/start.png").getImage();overImage=new ImageIcon("./source/gameover.png").getImage();//״̬ground=new Ground();column1=new Column(1);column2=new Column(2);bird=new Bird();score=0;state=0;}public void paint(Graphics g){g.drawImage(background, 0, 0,null);g.drawImage(ground.image, ground.x, ground.y, null);g.drawImage(column1.image,column1.x-column1.width/2,column1.y-column1.height/2,null);g.drawImage(column2.image,column2.x-column2.width/2,column2.y-column2.height/2,null);Graphics2D g2=(Graphics2D) g;g2.rotate(-bird.alpha,bird.x,bird.y);g.drawImage(bird.image,bird.x-bird.width/2,bird.y-bird.height/2,null);g2.rotate(bird.alpha,bird.x,bird.y);Font f=new Font(Font.SANS_SERIF,Font.BOLD,40);g.setFont(f);g.drawString(""+score, 40, 60);g.setColor(Color.WHITE);g.drawString(""+score,40-3, 60-3);switch(state){case START:g.drawImage(startImage, 0, 0, null);break;case GAME_OVER:g.drawImage(overImage, 0, 0, null);break;}}public void action() throws Exception{MouseListener l=new MouseAdapter(){public void mousePressed(MouseEvent e){try {switch(state) {case START://״̬state=RUNNING;break;case RUNNING:bird.flappy();break;case GAME_OVER:column1=new Column(1);column2=new Column(2);bird=new Bird();score=0;state=START;break;}}catch (Exception ex){ex.printStackTrace();}}};addMouseListener(l);while(true){switch(state){case START:bird.fly();ground.step();break;case RUNNING:ground.step();column1.step();column2.step();bird.fly();bird.step();score++;//if(bird.hit(ground)||bird.hit(column1)||bird.hit(column2)){state=GAME_OVER;}break;} Thread.sleep(1000/60);repaint();}}public static void main(String[] args) throws Exception{JFrame frame=new JFrame();BirdGame game=new BirdGame();frame.add(game);frame.setSize(440,670);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);game.action();}}
package game;import java.util.*;
import java.awt.*;import javax.imageio.ImageIO;
import javax.swing.*;public class Column {Image image;int x,y;int width,height;int gap;int distance;Random random =new Random();public Column(int n) throws Exception{image=new ImageIcon("source/column.png").getImage();width=image.getWidth(null);height=image.getHeight(null);gap=144;distance=245;x=550+(n-1)*distance;y=random.nextInt(218)+132;}public void step(){x-=4;if(x<= -width/2){x=distance*2-width/2;y=random.nextInt(218);}}
}
package game;import javax.swing.*;
import java.awt.*;public class Ground {Image image;int x,y;int width,height;public Ground() throws Exception{image =new ImageIcon("source/ground.png").getImage();width=image.getWidth(null);height=image.getHeight(null);x=0;y=500;}public void step(){x-=4;if(x<=-109){x=0;}}}



相关文章:
JAVA小游戏“飞翔的小鸟”
第一步是创建项目 项目名自拟 第二步创建个包名 来规范class 再创建一个包 来存储照片 如下: package game; import java.awt.*; import javax.swing.*; import javax.imageio.ImageIO;public class Bird {Image image;int x,y;int width,height;int size;doubl…...
1410. HTML 实体解析器 --力扣 --JAVA
题目 「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们对应的字符实体包括: 双引号:字符实体为 " ,对应的字符是 &qu…...
【开源】基于Vue.js的海南旅游景点推荐系统的设计和实现
项目编号: S 023 ,文末获取源码。 \color{red}{项目编号:S023,文末获取源码。} 项目编号:S023,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四…...
机器学习【01】相关环境的安装
学习实例 参考资料:联邦学习实战{杨强}https://book.douban.com/subject/35436587/ 项目地址:https://github.com/FederatedAI/Practicing-Federated-Learning/tree/main/chapter03_Python_image_classification 一、环境准备 GPU安装CUDA、cuDNN pytho…...
微服务实战系列之签名Sign
前言 昨日恰逢“小雪”节气,今日寒风如约而至。清晨的马路上,除了洋洋洒洒的落叶,就是熙熙攘攘的上班族。眼看着,暖冬愈明显了,叶子来不及泛黄就告别了树。变化总是在不经意中发生,容不得半刻糊涂。 上集博…...
家用小型洗衣机哪款性价比高?口碑最好迷你洗衣机排行榜
由于我们的内衣、内裤和袜子等等贴身小件衣物的清洁频率比一般的衣物要高。而且,如果我们人工手洗的话,不仅会大大浪费了我们的时间,而且还不能进行对这些贴身的以为进行深层消毒和除菌。这种情况下,就得需要一台专门用于清洗内衣…...
企业远程访问业务系统:对比MPLS专线,贝锐蒲公英为何更优优势?
如今,企业大多都会采用OA、ERP、CRM等各种数字化业务系统。 私有云、公有云混合架构也变得越来越常见。 比如:研发系统部署在公司本地私有云、确保数据安全,OA采用公有云方案、满足随时随地访问需求。 如此一来,也产生了远程访问…...
Maven项目下详细的SSM整合流程
文章目录 🎉SSM整合流程一、两个容器整合✨ 1、先准备好数据库config.properties连接、mybatis-config.xml🎊 2、容器一:优先配置spring.xml文件🎊 3、容器二:配置springMVC.xml文件🎊 4、Tomcat整合spring…...
Linux 设置文件开启数量限制
1、限制某个用户的 vim /etc/security/limits.confroot soft nofile 65535 root hard nofile 65535 *soft nofile 65535 *hard nofile 65535第一行指root用户的每个进程可开启最大的文件数(软限制,只警告)第二行指root用户的每个进程可开启最…...
详解Java中的异常体系机构(throw,throws,try catch,finally)
目录 一.异常的概念 二.异常的体系结构 三.异常的处理 异常处理思路 LBYL:Look Before You Leap EAFP: Its Easier to Ask Forgiveness than Permission 异常抛出throw 异常的捕获 提醒声明throws try-catch捕获处理 finally的作用 四.自定义异常类 一.异…...
【jvm】虚拟机之堆
目录 一、堆的核心概述二、堆的内存细分(按分代收集理论设计)2.1 java7及以前2.2 java8及以后 三、堆内存大小3.1 说明3.2 参数设置3.3 默认大小3.4 手动设置3.5 jps3.6 jstat3.7 OutOfMemory举例 四、年轻代与老年代4.1 说明 五、对象分配过程5.1 说明5…...
二百零五、Flume——数据流监控工具Ganglia单机版安装以及使用Ganglia监控Flume任务的数据流(附流程截图)
一、目的 Flume采集Kafka的数据流需要实时监控,这时就需要用到监控工具Ganglia 二、Ganglia简介 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 (一)第一部分:gmond gmond(Ganglia Monitoring Daemon)…...
解决Resolving Android Dependencies问题
无论是谷歌的Admob,还是Unity的Level play, 在windows(win10, win11)下,都出现了resolving android dependencies 报错并且卡住的问题,如图: 主要错误,是找不到这个gradlew.bat文件。 在指定位置…...
深度学习技术前沿:探索与挑战
深度学习技术前沿:探索与挑战 一、引言 近年来,深度学习作为人工智能领域的重要分支,取得了令人瞩目的成就。它凭借强大的学习能力和出色的性能,在图像识别、语音识别、自然语言处理等众多任务中展现出巨大潜力。本文将深入探讨深…...
2023-11-24--oracle--实验--[Merge 语句]
oracle--实验---Merge语句 1.认知Merge 语句 • merge 语句是 sql 语句的一种。在 SQL server 、 Oracle 数据库中可用, MySQL 中不可用。 • merge 用来合并 update 和 insert 语句。目的:通过 merge 语句,根据一张表( 原数据表…...
2023亚太杯C题30页高质量word成品论文+五小问py代码+数据集+运行结果图
迈向绿色未来:中国新能源电动汽车综合分析 摘要 (完整版获取在文末!!!) 这项深入研究探讨了中国新能源电动汽车 (NEEV) 的新兴领域,涵盖从市场动态到生 态影响等广泛方面。问题一深入探讨新能…...
【docker】安装redis和mysql生产实战
docker安装诸如redis,mysql等程序非常方便,但是如果不是为了学习,生产环境的部署还是要注意很多问题的 mysql docker pull mysql:5.7mkdir -p /usr/docker/mysql/{conf,logs,data}docker run -d -p 3306:3306 --privilege...
【nlp】3.1 Transformer背景介绍及架构
Transformer背景介绍 1 Transformer的诞生2 Transformer的优势3 Transformer的市场4 Transformer架构4.1 Transformer模型的作用4.2 Transformer总体架构图4.2.1 输入部分4.2.2 输出部分包含4.2.3 编码器部分4.2.4 解码器部分1 Transformer的诞生 2018年10月,Google发出一篇论…...
喜报!美格智能连续五年荣获物联网100强企业
近日,由中国科学院主管、科学出版社主办的《互联网周刊》联合eNet研究院发布了“2023物联网企业100强”榜单,美格智能凭借在技术创新、市场表现、综合实力等多方面的健稳表现连续五年入选榜单。 《互联网周刊》创办于1998年,是最为权威的商业…...
『Confetti 喜庆散花插件の使用』
以下用 VUE3 语法 举例使用: npm install js-confetti<script setup lang"ts"> import JSConfetti from js-confetticonst confetti new JSConfetti()function showConfetti() {confetti.addConfetti() } </script><template><h1 …...
RISC-V实战:手把手教你为蜂鸟E203设计一个简单的矩阵累加协处理器
RISC-V实战:从零构建蜂鸟E203矩阵累加协处理器 在嵌入式系统设计中,性能优化始终是开发者面临的核心挑战。当标准处理器无法满足特定算法的计算需求时,定制化硬件加速器便成为提升效率的关键。本文将带领您完成一个完整的RISC-V协处理器开发项…...
新手友好:基于VSCode与Node.js的后台管理系统一站式搭建指南
1. 环境准备:从零搭建开发环境 刚接触Web开发时,环境配置往往是第一个拦路虎。我至今记得第一次安装Node.js时,因为没配置环境变量导致命令行报错的尴尬。下面我会用最直白的语言,带你避开这些坑。 1.1 安装VSCode:你的…...
不平衡数据分类中的k折交叉验证优化策略
1. 不平衡分类中的k折交叉验证陷阱第一次在信用卡欺诈检测项目中使用k折交叉验证时,我遇到了一个奇怪的现象——模型在验证集上的准确率高达99.8%,但在真实测试数据上却连最简单的欺诈案例都识别不出来。这个惨痛教训让我意识到:传统k折交叉验…...
如何用tiny11builder快速打造纯净高效的Windows 11精简系统:终极指南
如何用tiny11builder快速打造纯净高效的Windows 11精简系统:终极指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 厌倦了Windows 11系统日益臃肿&a…...
前端跨平台开发
前端跨平台开发:打破界限的利器 在移动互联网时代,用户设备多样化,从手机、平板到桌面端,开发者需要确保应用在不同平台上都能流畅运行。传统开发模式下,为每个平台单独编写代码不仅耗时,还增加了维护成本…...
【OpenMV+STM32】PID算法调优与二维云台色块追踪实战
1. 从零理解PID控制的核心逻辑 第一次接触PID算法时,我被那些微分积分公式吓得不轻。直到把云台控制拆解成日常场景才豁然开朗——就像新手司机学倒车入库:看到车位偏左就向右打方向(比例控制),发现方向盘转得太猛就稍…...
VSCode远程终端输入延迟>400ms?Linux内核级tty缓冲区溢出问题首曝,附patch+一键修复脚本
更多请点击: https://intelliparadigm.com 第一章:VSCode远程终端输入延迟>400ms?Linux内核级tty缓冲区溢出问题首曝,附patch一键修复脚本 近期大量开发者反馈,在 VSCode Remote-SSH 连接 Linux 服务器时&…...
Progress ShareFile 曝双重严重漏洞:无需认证即可实现远程代码执行
【安全快讯】 2026年4月,网络安全研究机构 watchTowr Labs 披露了一项针对企业级文件传输平台 Progress ShareFile 的严重安全威胁。研究人员在 ShareFile 5.x 分支的 Storage Zones Controller(存储区域控制器,简称 SZC)组件中发…...
Switch手柄连接PC的终极指南:用BetterJoy实现完美适配
Switch手柄连接PC的终极指南:用BetterJoy实现完美适配 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/…...
AI提示词与模型仓库:提升开发效率的系统化解决方案
1. 项目概述:AI工具的系统提示词与模型仓库 如果你和我一样,在AI应用开发或日常工作中,经常需要为不同的任务寻找合适的提示词(Prompt)和模型,那你一定体会过那种“东拼西凑”的烦恼。今天要聊的这个项目&…...
