⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lihua.java

📁 礼花程序
💻 JAVA
字号:
import java.awt.Color; //继承包awt中的颜色类
import java.awt.Graphics; //继承包awt中的绘图类
import java.awt.event.MouseAdapter; //继承包awt中的事件类的鼠标适配器类
import java.awt.event.MouseEvent; //继承包awt中的事件类的鼠标事件类
import javax.swing.JFrame; // java.awt.Frame 的扩展版本
import javax.swing.WindowConstants;// 用于控制窗口关闭操作的常量,SwingConstants通常用于在屏幕上定位或定向组件的常量的集合。

public class LiHua extends JFrame implements Runnable{
	int x, y;
	public LiHua(){ //构造方法
	//添加鼠标事件到一个鼠标适配器类
		this.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				x = e.getX(); //鼠标点击获得一个横坐标值
				y = e.getY(); //鼠标点击获得一个横坐标值
				myThread(); //线程启动
			}
		});
		this.getContentPane().setBackground(Color.BLACK);//设置背景颜色为黑色
		this.setSize(500, 500); //设置框架窗口的初始大小
		this.setVisible(true); //窗口可视
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置为退出应用程序默认窗口关闭操作
	}
	//构造一个线程
	public void myThread() {
		Thread t = new Thread(this);
		t.start(); //启动线程t
	}
	//该方法用来获得一个颜色类,它的颜色是随机产生的
	public Color myColor() {
		int r, g, b;
		r = (int) (Math.random() * 255);
		g = (int) (Math.random() * 255);
		b = (int) (Math.random() * 255);
		Color color = new Color(r, g, b); //获得颜色
		return color;
	}
	//线程调用时执行
	public void run() {
	// 开始放礼花,此方法描述礼花上升和爆炸的过程
			Graphics g;
			g = this.getGraphics();
			int x1, y1, y0;
			x1 = x; //若没点击鼠标,则x=0
			y1 = 300;
			y0 = 300;
			int xx1=0;
			int xx2=0;
			int xx3=0;
			int xx4=0;
			for (int i = 0; i < 310; i++) {
				if(i%2==0)//为了看清楚礼花弹上升过程保持0.1秒
				repaint();//清除屏幕
				int mm1=0;
			  if(i>13)//礼花爆炸下落时候水平方向随时间i的位移
				{
					xx3=xx3-1;//-7为爆炸时的速度
					xx4=xx4-7;//-3为爆炸时的速度
					xx1=xx1+1;//1为爆炸时的速度
					xx2=xx2+7;//7为爆炸时的速度
				}
					
				if (i<13) { //礼花上升
			  g.setColor(this.getBackground());
				g.fillOval(x1, y0 , 10, 5); //画填充圆
				y0=(int)(y0-20+10*0.1*i+0.5*10);//礼花弹Y方向随时间i的位移
				try {
					Thread.sleep(100);
					} catch (InterruptedException e) {
					e.printStackTrace(); //在屏幕上打印异常信息
				}
			}
			 else { //礼花开始爆炸
				
		mm1=mm1+(int)(10*0.5*(i-13)+0.5*10-50);//礼花爆炸后Y方向随时间的位移
		          //mm0-mm1=gt+1/2g,t=0.1i,即前一个高度减后一个高度的值
														
					g.setColor(myColor());
				for (int m = 0; m < 360;) {
					
					double yuan = (Math.toRadians(m)); //将用 度数测量的角转换为近似相等的用弧度测量的角。
					int hua = (int) (Math.random() * 5); // 随机产生一个小于25的数 
					int ix = (int) (Math.sin(yuan) * 5); 
					//ix为角的三角正弦值乘r的整数
					//iy为角的三角余弦值乘r的整数
					int iy = (int) (Math.cos(yuan) * 5);
			     g.drawString("*", x1+ix+hua+xx1, y0+iy+hua+mm1); //在位置x1 + ix + hua, y0 + iy + hua填充图形’*’
										g.drawString("*", xx2+x1+ix+hua, y0+iy+hua+mm1);
										g.drawString("*", x1+ix+hua+xx3, y0+iy+hua+mm1); //在位置x1 + ix + hua, y0 + iy + hua填充图形’*’
										g.drawString("*", xx4+x1+ix+hua, y0+iy+hua+mm1);
										m+=1;
				}
								
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace(); //在屏幕上打印异常信息
				}
			}
		}
	}
	public static void main(String[] args){
		LiHua hua=new LiHua(); //创建一个fanglihua方法的实例
		hua.run();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -