【原创】java 流星划过天空
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage; import javax.swing.JFrame;
import javax.swing.JPanel; public class MeteorFly extends JFrame { final int MAX = 5; // (1~1000)流星的个数
final int SLEEP = 30; // 流星飞行的速度(数值越大,速度越慢)
final int COLORLV = 2; // (2~20)色阶(可改变光晕大小)
final String COLOR = null; // ("#000000"~"#ffffff")光晕颜色(如果不填或null,则为默认颜色)
final int SIZE = 3; // (2~50)流星大小 private MyPanel panel; public MeteorFly() {
panel = new MyPanel();
this.getContentPane().add(panel); this.setSize(800, 400); // 创建窗体
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
} public static void main(String[] args) {
new MeteorFly();
} class MyPanel extends JPanel implements Runnable { Meteor p[]; int AppletWidth, AppletHeight; BufferedImage OffScreen;
Graphics drawOffScreen;
Thread pThread; public MyPanel() {
setBackground(Color.black); //窗体初始化
AppletWidth = 800;
AppletHeight = 400;
p = new Meteor[MAX];
for (int i = 0; i < MAX; i++)
p[i] = new Meteor();
OffScreen = new BufferedImage(AppletWidth, AppletHeight,
BufferedImage.TYPE_INT_BGR);
drawOffScreen = OffScreen.getGraphics();
pThread = new Thread(this);
pThread.start();
} @Override
public void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponents(g);
g.drawImage(OffScreen, 0, 0, this);
} @Override
final public void run() {
while (true) {
// drawOffScreen.clearRect(0, 0, AppletWidth, AppletHeight); //
// 清屏 for (int i = 0; i < MAX; i++) {
drawOffScreen.setColor(p[i].color); // RGB颜色
drawOffScreen.fillOval(p[i].x, p[i].y, SIZE, SIZE);
p[i].x += p[i].mx;
p[i].y += p[i].my;
// if (p[i].x > AppletWidth || p[i].y > AppletHeight) {
// p[i].reset();
// } int x = p[i].x;
int y = p[i].y;
int R = p[i].color.getRed(); // 提取颜色
int G = p[i].color.getGreen();
int B = p[i].color.getBlue();
while (true) {
if (R == 0 && G == 0 && B == 0) {
break;
}
R -= COLORLV; // 尾部颜色淡化
if (R < 0) {
R = 0;
}
G -= COLORLV;
if (G < 0) {
G = 0;
}
B -= COLORLV;
if (B < 0) {
B = 0;
}
Color color = new Color(R, G, B);
x -= p[i].mx; // 覆盖尾部
y -= p[i].my;
drawOffScreen.setColor(color);
drawOffScreen.fillOval(x, y, SIZE, SIZE);
}
if (x > AppletWidth || y > AppletHeight) { // 流星飞出窗口,重置流星
p[i].reset();
}
}
repaint(); try {
Thread.sleep(SLEEP);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} } class Meteor { // 流星类
int x, y; // 流星的位置
int mx, my; // 下落速度
Color color; // 流星颜色 public Meteor() {
reset();
} public void reset() {
int rand = (int) (Math.random() * 100); //随机生成流星出现位置
if (rand > 35) {
x = (int) (Math.random() * 600);
y = 0;
} else {
y = (int) (Math.random() * 150);
x = 0;
}
mx = (int) (Math.random() * 2 + 1); //随机生成下落速度和角度
my = (int) (Math.random() * 2 + 1);
if (COLOR == null || COLOR.length() == 0) {
color = new Color(
// 随机颜色
(new Double(Math.random() * 128)).intValue() + 128,
(new Double(Math.random() * 128)).intValue() + 128,
(new Double(Math.random() * 128)).intValue() + 128);
} else {
color = Color.decode(COLOR);
}
}
} }
本人原创未经允许请勿转载
【原创】java 流星划过天空的更多相关文章
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]Java性能优化权威指南读书思维导图
[原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt Binu John 译者: 柳飞 ...
- [原创]Java静态代码检查工具介绍
[原创]Java静态代码检查工具介绍 一 什么是静态代码检查? 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]Java性能优化权威指南读书思维导图4
[原创]Java性能优化权威指南读书思维导图4
- [原创]Java性能优化权威指南读书思维导图3
[原创]Java性能优化权威指南读书思维导图3
- [原创]Java性能优化权威指南读书思维导图2
[原创]Java性能优化权威指南读书思维导图2
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
随机推荐
- HDU-4614 Vases and Flowers 线段树区间更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 线段树保存区间是否被覆盖以及区间的和即可,在询问的时候在线段树上二分查找就可以了...代码写得比 ...
- ant -verbose -debug ...
ant -verbose -debug (target) 可以让ant打印出所执行的command任务
- Java HashMap 核心源码解读
本篇对HashMap实现的源码进行简单的分析. 所使用的HashMap源码的版本信息如下: /* * @(#)HashMap.java 1.73 07/03/13 * * Copyright 2006 ...
- PT100测温电路经验
P100电压采集放大电路:前半部分是4.096V恒压源电路,然后是一个桥式电压采样电路,后面是一个电压放大电路. 一 4.096V恒压源电路: 因Vref = 2.5V,故有4.096 = (1 + ...
- C#操作JSON学习
JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在 ...
- Oracle 监听器无法启动(TNS-12555,TNS-12560,TNS-00525)
启动监听器无法打开,报错! [oracle@localhost ~]$ lsnrctl start LSNRCTL for Linux: Version 11.2.0.1.0 - Production ...
- EventBus的使用,初学EventBus传值
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...
- android小笔记
1.启动其他应用程序 Intent launchIntent = getPackageManager().getLaunchIntentForPackage(currentAppInfo.getPac ...
- C#_Ajax分页MVCPager
UCJqOrderList @model PagedList<Order> <div id="dvOrders"> <table width=&quo ...
- Response
Response This improved Response API, able to simplify the Framework's Response management. Practical ...