用java制作飞翔的小鸟

news2024/11/23 9:32:01

第一步是创建项目 项目名自拟

第二步创建个包名 来规范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);
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1271364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机体系结构----指令系统(二)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----计算机系统结构教程(第二版)张晨曦等 计算机体系结构----指令系统&#xff08;二&#xff09; 2.1 指令系统结构的分类2.2 寻址方式2.3 MIPS 指令系统结构2.3.1 MIPS的寄存器2.3.2 MIPS的…

虚拟化CentOS7分区大小调整+磁盘扩容=新分区

一、适应场景 1、虚拟化环境ESXI6.7下的虚拟服务器&#xff0c;使用一段时间后&#xff0c;把空闲的存储空间腾出来&#xff0c;给新的分区使用。 2、Linux的版本为CentOS7 3、本例为部署minio存储业务做准备 4、虚拟化存储扩容 二、配置过程 调整分区大小&#xff0c;为min…

Go语言 值传递

官方说法&#xff0c;Go中只有值传递&#xff0c;没有引用传递 而Go语言中的一些让你觉得它是引用传递的原因&#xff0c;是因为Go语言有值类型和引用类型&#xff0c;但是它们都是值传递。 值类型 有int、float、bool、string、array、sturct等 引用类型有slice&#xff0c…

免费SSL证书有效果吗?

首先&#xff0c;我们要明确一点&#xff1a;无论是付费还是免费的SSL证书&#xff0c;它们都能实现基本的HTTPS加密功能&#xff0c;确保数据在客户端和服务器之间的传输过程中不会被窃取或篡改。从这个角度来看&#xff0c;免费SSL证书的确可以提供一定的安全保障。 然而&…

每天一点python——day81

#每天一点Python——81 #递归函数&#xff1a; 递归函数&#xff1a; 一个函数在该函数体内调用了该函数本身&#xff0c;这个函数称为递归函数 【释&#xff1a;我自己调用自己的函数】 递归函数的组成部分&#xff1a; 递归调用与递归终止条件。 【一定有一个跳出循环的终止条…

【MySQL】事务(事务四大特性+四种隔离级别+MVCC)

事务 前言正式开始事务的四大特性为什么会出现事务事务的版本支持事务提交方式事务常见操作方式启动事务回滚演示提交事务事务的异常autocommit 事务的隔离性隔离级别查看隔离级别修改隔离级别验证四种隔离级别读未提交(read uncommitted) —— 缩写为RU读提交(read committed)…

web:catcat-new(文件包含漏洞、flask_session伪造)

前提知识 /etc/passwd 该文件储存了该Linux系统中所有用户的一些基本信息&#xff0c;只有root权限才可以修改。其具体格式为 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell&#xff08;以冒号作为分隔符&#xff09; /proc/self proc是一个伪文件系统…

C++和Python混合编程在数据采集程序中的应用

目录 一、引言 二、C和Python的特性及其在数据采集程序中的应用 1、C的特性及其在数据采集程序中的应用 2、Python的特性及其在数据采集程序中的应用 三、C和Python混合编程在数据采集程序中的实现方法 四、混合编程的优缺点以及未来发展趋势 五、代码示例 六、结论 一…

创业者如何在居家办公和固定办公场地办公中权衡利弊,选择合适的

创业者如何选择办公方式&#xff0c;可能要根据自己的创业项目、团队规模、资金情况、行业特点等多方面因素来考虑。一般来说&#xff0c;居家办公和固定办公场地各有优缺点&#xff0c;没有绝对的好坏&#xff0c;只有适合不适合。我为大家总结了一些相关的信息&#xff0c;希…

Spring-AOP与声明式事务

为什么要用AOP ①现有代码缺陷 针对带日志功能的实现类&#xff0c;我们发现有如下缺陷&#xff1a; 对核心业务功能有干扰&#xff0c;导致程序员在开发核心业务功能时分散了精力 附加功能分散在各个业务功能方法中&#xff0c;不利于统一维护 ②解决思路 解决这两个问题&…

原来字节跳动这么容易就能进····

“字节是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在字节做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有12.5K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在字节…

SpringBoot查询指定范围内的坐标点

使用Redis geo实现 redis geo是基于Sorted Set来实现的 Redis 3.2 版本新增了geo相关命令&#xff0c;用于存储和操作地理位置信息。提供的命令包括添加、计算位置之间距离、根据中心点坐标和距离范围来查询地理位置集合等&#xff0c;说明如下: geoadd&#xff1a;添加地理…

海光信息荣获ESG金牛科技引领奖!

11月24日&#xff0c;由中国证券报、中国国新控股有限责任公司、南通市人民政府联合主办的”2023金牛企业可持续发展论坛暨第一届国新杯ESG金牛奖颁奖典礼”在江苏南通举行&#xff0c;“国新杯ESG金牛奖”多项获奖名单同期揭晓。海光信息凭借卓越的技术创新实力与行业影响力&a…

Facebook的这份开源协议使React四面楚歌

如果你觉得一些科技公司看起来很美好&#xff0c;每天都在“改变世界”……你应该看看他们的用户条款和法律文书&#xff0c;藏污纳垢之严重令人震惊。 最近&#xff0c;百度和阿里巴巴内部的软件工程团队不约而同做了一件事——弃用 React。 解释下&#xff1a; React 是一个…

可爱IP挖掘方法论,打造内容界的“显眼包”

近些年&#xff0c;人们十分乐意为“可爱”买单。玲娜贝儿、loopy、卡皮巴拉……社交平台的萌系表情包大行其道&#xff0c;皆源于可爱事物抚慰心灵的奇效。小红书话题「大人也要玩玩具」近90天互动量突破13亿&#xff0c;一跃成为年轻人的热门趋势。 本期千瓜将从行业案例出发…

AI Agents 闭门研讨会报名丨CAMEL、AutoAgents、Humanoid agents作者参与

青源Workshop丨No.27 AI Agents主题闭门研讨会 所谓AI智能体&#xff08;AI Agents&#xff09;&#xff0c;是一种能够感知环境、进行决策和执行动作的智能实体。它们拥有自主性和自适应性&#xff0c;可以依靠AI赋予的能力完成特定任务&#xff0c;并在此过程中不断对自我进行…

Apache Doris 整合 FLINK CDC 、Paimon 构建实时湖仓一体的联邦查询入门

1.概览 多源数据目录&#xff08;Multi-Catalog&#xff09;功能&#xff0c;旨在能够更方便对接外部数据目录&#xff0c;以增强Doris的数据湖分析和联邦数据查询能力。 在之前的 Doris 版本中&#xff0c;用户数据只有两个层级&#xff1a;Database 和 Table。当我们需要连…

应用软件快速开发平台,一起实现办公流程化发展!

做好办公流程化发展能给企业带来什么好处&#xff1f;其实&#xff0c;在快节奏发展社会中&#xff0c;很多企业的规模和业务量也在不断扩展中&#xff0c;如果还是懒散的办公方式是不能达到事半功倍的效果的。要想实现高效率发展&#xff0c;采用办公流程化发展能让企业管理朝…

一文让你深入了解JavaSE的知识点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

leetcode:循环队列

题目描述 题目链接&#xff1a;622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 题目分析 我们开辟空间的时候多开一个&#xff0c;k是队列的长度&#xff0c;我们开k1个空间&#xff0c;定义一个front指向头&#xff0c;back的下一个指向尾 当frontback的时候&am…