1 importjava.awt.Color;2 importjava.awt.Graphics;3 importjava.awt.image.BufferedImage;4

5 importjavax.swing.JFrame;6 importjavax.swing.JPanel;7

8 public class MeteorFly extendsJFrame {9

10 final int MAX = 5; //(1~1000)流星的个数

11 final int SLEEP = 30; //流星飞行的速度(数值越大,速度越慢)

12 final int COLORLV = 2; //(2~20)色阶(可改变光晕大小)

13 final String COLOR = null; //("#000000"~"#ffffff")光晕颜色(如果不填或null,则为默认颜色)

14 final int SIZE = 3; //(2~50)流星大小

15

16 privateMyPanel panel;17

18 publicMeteorFly() {19 panel = newMyPanel();20 this.getContentPane().add(panel);21

22 this.setSize(800, 400); //创建窗体

23 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);24 this.setVisible(true);25 }26

27 public static voidmain(String[] args) {28 newMeteorFly();29 }30

31 class MyPanel extends JPanel implementsRunnable {32

33 Meteor p[];34

35 intAppletWidth, AppletHeight;36

37 BufferedImage OffScreen;38 Graphics drawOffScreen;39 Thread pThread;40

41 publicMyPanel() {42 setBackground(Color.black); //窗体初始化

43 AppletWidth = 800;44 AppletHeight = 400;45 p = newMeteor[MAX];46 for (int i = 0; i < MAX; i++)47 p[i] = newMeteor();48 OffScreen = newBufferedImage(AppletWidth, AppletHeight,49 BufferedImage.TYPE_INT_BGR);50 drawOffScreen =OffScreen.getGraphics();51 pThread = new Thread(this);52 pThread.start();53 }54

55 @Override56 public voidpaintComponent(Graphics g) {57 //TODO Auto-generated method stub

58 super.paintComponents(g);59 g.drawImage(OffScreen, 0, 0, this);60 }61

62 @Override63 final public voidrun() {64 while (true) {65 //drawOffScreen.clearRect(0, 0, AppletWidth, AppletHeight);//

66 //清屏

67

68 for (int i = 0; i < MAX; i++) {69 drawOffScreen.setColor(p[i].color); //RGB颜色

70 drawOffScreen.fillOval(p[i].x, p[i].y, SIZE, SIZE);71 p[i].x +=p[i].mx;72 p[i].y +=p[i].my;73 //if (p[i].x > AppletWidth || p[i].y > AppletHeight) {74 //p[i].reset();75 //}

76

77 int x =p[i].x;78 int y =p[i].y;79 int R = p[i].color.getRed(); //提取颜色

80 int G =p[i].color.getGreen();81 int B =p[i].color.getBlue();82 while (true) {83 if (R == 0 && G == 0 && B == 0) {84 break;85 }86 R -= COLORLV; //尾部颜色淡化

87 if (R < 0) {88 R = 0;89 }90 G -=COLORLV;91 if (G < 0) {92 G = 0;93 }94 B -=COLORLV;95 if (B < 0) {96 B = 0;97 }98 Color color = newColor(R, G, B);99 x -= p[i].mx; //覆盖尾部

100 y -=p[i].my;101 drawOffScreen.setColor(color);102 drawOffScreen.fillOval(x, y, SIZE, SIZE);103 }104 if (x > AppletWidth || y > AppletHeight) { //流星飞出窗口,重置流星

105 p[i].reset();106 }107 }108 repaint();109

110 try{111 Thread.sleep(SLEEP);112 } catch(InterruptedException e) {113 //TODO Auto-generated catch block

114 e.printStackTrace();115 }116 }117 }118

119 }120

121 class Meteor { //流星类

122 int x, y; //流星的位置

123 int mx, my; //下落速度

124 Color color; //流星颜色

125

126 publicMeteor() {127 reset();128 }129

130 public voidreset() {131 int rand = (int) (Math.random() * 100); //随机生成流星出现位置

132 if (rand > 35) {133 x = (int) (Math.random() * 600);134 y = 0;135 } else{136 y = (int) (Math.random() * 150);137 x = 0;138 }139 mx = (int) (Math.random() * 2 + 1); //随机生成下落速度和角度

140 my = (int) (Math.random() * 2 + 1);141 if (COLOR == null || COLOR.length() == 0) {142 color = newColor(143 //随机颜色

144 (new Double(Math.random() * 128)).intValue() + 128,145 (new Double(Math.random() * 128)).intValue() + 128,146 (new Double(Math.random() * 128)).intValue() + 128);147 } else{148 color =Color.decode(COLOR);149 }150 }151 }152

153 }

java编写流星_【原创】java 流星划过天空相关推荐

  1. 怎样用java编写日志_用JAVA写一个日志类程序以供大家学习

    中华网络安全联盟    作者:jacoo    来源:本站原创    时间:2006-4-18 说明: 尽管JAVA类库和其他工具提供了不少的纪录程序运行状态的日志类,我发觉也 不是万能的,有时需要根 ...

  2. java编写存钱_用Java编写一个简单的存款

    package desposit.money; public class DespositMoney { public static void main(String[] args) { Custom ...

  3. java编写管理系统_用java编写学生信息管理系统

    <用java编写学生信息管理系统>由会员分享,可在线阅读,更多相关<用java编写学生信息管理系统(7页珍藏版)>请在人人文库网上搜索. 1.用java编写学生信息管理系统im ...

  4. 用java编写圆锥_求java大神帮忙 求大神帮助!Java

    导航:网站首页 > 求java大神帮忙 求大神帮助!Java 求java大神帮忙 求大神帮助!Java 相关问题: 匿名网友: 普通类 public class CircularA { //求圆 ...

  5. java图片叠加_[原创]JAVA中图片上叠加文字的方法

    --sunfruit JDK:1.3.x以上 功能:下面是一个简单在图片上面叠加文字的方法,有朋友如果有这方面的问题,就起个了解的作用 代码如下: import java.io.IOException ...

  6. 用java编写计算器_用Java编写一个简单的计算器

    1.使用记事本或eclipse等编程工具,建立一个图形界面应用程序. 2.程序完成简单的四则计算功能 3.用户可以在名为Number1和Number2的文本输入框中输入2个操作数,然后点击下面的4个按 ...

  7. 用java编写计算器_用JAVA编写一个计算器

    展开全部 import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.aw ...

  8. java编写机器人_用JAVA编写自己的机器人一起“厮杀”

    什么是Robocode? 最近我在阅读一个关于极限编程(XP)的邮件列表,有人提议为对学习更多的XP方法学知识感兴趣的开发人员构建一个工作间.这位作者还建议,把一群人凑到一起,分成小组研究该方法学. ...

  9. 用java编写程序_用JAVA编写程序

    展开全部 import java.util.Arrays; import java.util.Collections; import java.util.List; public class Baid ...

  10. 用java编写圆锥_用java中的graphics画圆锥的代码

    展开全部 圆锥就32313133353236313431303231363533e4b893e5b19e31333337616564是一个三角形+一个椭圆.只要算好三角形和椭圆 的坐标就可以了impo ...

最新文章

  1. java已知一个二叉树_Day58:对称的二叉树
  2. bzoj1935: [Shoi2007]Tree 园丁的烦恼
  3. NumSharp v0.6 科学计算库发布,新增 LAPACK 的线性库支持
  4. [Leetcode][第1143题][JAVA][最长公共子序列][LCS][动态规划]
  5. 1到n阶乘算法的改进
  6. mysql数据库诊断_RDS MySQL 数据库全量SQL诊断
  7. C#读取XML文件的基类实现
  8. leetcode前缀树java_Java实现 LeetCode 208 实现 Trie (前缀树)
  9. CompletableFuture的runAsync
  10. python-引用/模块
  11. Leetcode之插入区间
  12. wps android 安装包下载地址,WPS Office手机版下载安装_WPS Office下载软件安卓版13.0.1...
  13. android 命令截图,Android截图命令screencap与视频录制命令screenrecord
  14. 元数据是什么?举例告诉你什么是元数据
  15. 西安2020EC游记
  16. 使用 IDEA 文件统计工具 Statistic
  17. 论文编写工具使用(1)latex软件
  18. m4s格式转换mp3_怎么把腾讯缓存的视频转换成MP3格式
  19. TCP/ip 协议端口范围 详解
  20. Matplotlib的子图subplot 显示多图

热门文章

  1. docker/Dockerfile/docker compose
  2. 服务器电池维修,服务器电池电量低判断方法
  3. Kibana:Kibana Query Language - KQL
  4. 计算机的内存的作用是什么,电脑内存的作用是什么?
  5. 17网里多个商品里全部图片复制并分类保存的技巧
  6. hbase加入数据 java_插入java数据
  7. 我只是想使用一下微软在线文档
  8. 水平型微指令与垂直型微指令
  9. TpyeScript基础
  10. 解决opencv保存视频打不开问题