📄 lihua.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 + -