java流星雨告白

java流星雨告白

这是我参考一个古老版本写的,他所有的内容就只有一条线形成流星。

新手操作
过程就是:先有流星雨,然后出现告白的字,然后调用本地播放器,播放一段我的视频。

2020的七夕用了,效果嘛,不如一个520的红包(桑心),并不是告白,是写给我女朋友的。

实现机制:
流星:是填充的小圆圈做的头,尾部就一条线。
文字:文字的依次出现是我加了自定义统计数,因为是多线程一直使用,计数也在累加,所以当计数达到某个数时,执行文字段代码,所以有了依次出现的效果。(方法有些笨,而且计数好想超过了1700,就不行了,我也不知道怎么回事)。
月亮:画两个圆,一个白色,一个黑色,然后叠加一部分
星星:有些强行和莫名,哈哈,同位置,两种白色,一种纯白,一种淡白,交替执行,造成一种闪烁的效果(有些勉强)。

截图如下
在这里插入图片描述

//其中有一些莫名的代码,哈哈

import java.io.;
import java.util.
;
import java.awt.;
import javax.swing.
;

public class d extends JFrame implements Runnable {
Canvas canvas = new Canvas();
public d() {
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
int wight = Toolkit.getDefaultToolkit().getScreenSize().width;
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(wight,height);
//this.setLocation(-1, 0);
canvas.setSize(this.getSize().width, this.getSize().height);
this.getContentPane().add(canvas, BorderLayout.CENTER);
this.pack();
canvas.setBackground(Color.BLACK);
this.setVisible(true);
}
ArrayList rainlist = new ArrayList<>();
//ArrayList rr = new ArrayList();
//ArrayList xr = new ArrayList();
Random random = new Random();
public void paint(){
Image image = createImage(this.getSize().width, this.getSize().height);
Graphics g = image.getGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, this.getSize().width, this.getSize().height);
for(int i = 0; i < 10; i++){
rainlist.add(new Rain(getSize().width/4+random.nextInt()%(getSize().width+getSize().width/4)
,getSize().width/4+random.nextInt()%(getSize().width+getSize().width/4)
,getSize().width/4+random.nextInt()%(getSize().width+getSize().width/4)));
}
for(int i = 0; i < rainlist.size(); ){
rainlist.get(i).liuXingPaint(g);
// rr.get(i).paint(g);
if(rainlist.get(i).y > this.getSize().height){
rainlist.remove(i);
} else {
i++;
}
}
canvas.getGraphics().drawImage(image, 0, 0, null);
}
class Rain {
int ci = 0;
public int x, y, a, b,c,d;
public Rain(int x,int a,int c){
this.x = x;
this.y = 0;
this.a = a;
this.b = 0;
this.c = c;
this.d = 0;
}
public void XingXingPaint(Graphics g){
for(int i = 0 ; i < 10 ;i++) {
/ThreadLocalRandom tt = ThreadLocalRandom.current();
int v = tt.nextInt(300);
int vv = tt.nextInt(1080);
/
g.setColor(new Color(160,160,160));
g.drawString(“★”, 100, 100);
g.setColor(new Color(220,220,220));
g.drawString(“★”, 100, 100);

                g.setColor(new Color(160,160,160));
                g.drawString("★", 800, 34);
                g.setColor(new Color(220,220,220));
                g.drawString("★", 800, 34);
                //
                g.setColor(new Color(160,160,160));
                g.drawString("★", 300, 20);
                g.setColor(new Color(220,220,220));
                g.drawString("★", 300, 20);
            }

        
    }
    
    public void liuXingPaint(Graphics g){
        //黑色圆遮掉白色圆,形成月亮
        g.setColor(Color.white);
        g.fillOval(20, 20, 60, 60);
        g.setColor(Color.BLACK);
        g.fillOval(0, 0, 60, 60);
        int R=(int)(Math.random()*255);
        int G=(int)(Math.random()*255);
        int B=(int)(Math.random()*255);
        //偶尔快的流星
        int xing =(int)(Math.random()*50 + 1);
        int xing1 = (int)(Math.random()*50 + 1);
        int xing2 = (int)(Math.random()*50 + 1);
        if(xing == 20 && xing1 > 5) {
            g.setFont(new Font("",Font.BOLD,20));
            g.setColor(new Color(250,250,250));
            g.drawString("★", 30, 20);
            g.setColor(new Color(180,180,180));
            g.drawString("★", 30, 20);
        }
  	/* g.setColor(new Color(220,220,220));
     g.drawString("★", 20, 340);*/

        //流星雨
        g.setColor(new Color(R,G,B));
        //g.drawOval(x-2, y-3, 5, 4);
        g.setColor(Color.white);
        g.fillOval(x-2, y-2, 4, 4);
        g.setColor(new Color(200,200,200));
        g.drawLine(x+19,y-20, x, y);
        x-=10;
        y+=10;
        //文字描述
        if(xing == 1 && xing1 == 5 && xing2 >= 40) {
            g.setColor(Color.white);
            g.fillOval(a-2, b-2, 4, 4);
            g.setColor(new Color(200,200,200));
            g.drawLine(a-850,b+1000, a, b);
            a-=10;
            b+=10;
        }
        int c = 300 ;
        int d = 100;
        String zi = "能遇到你,是我最大的幸运";
        ci = ci +20;
        if(ci == 700) {
            String[] f = zi.split(",");
            for(int i = 0 ; i < f.length ; i++) {
                g.setColor(new Color(255,255,255));
                g.setFont(new Font("宋体",Font.BOLD,20));
                g.drawString(f[i], c, d);
                c+=20;
            }
        }
        if(ci == 1000) {
            c -= 20;
            d += 50;
            String zi1 = "能和你在一起,是我最幸福的事";
            String[] f1 = zi1.split(",");
            for(int i = 0 ; i < f1.length ; i++) {
                g.setColor(new Color(255,255,255));
                g.setFont(new Font("宋体",Font.BOLD,20));
                g.drawString(f1[i], c, d);
                c+=20;
            }
        }
        //ci1+=20;
        if(ci == 1300) {
            d += 100;
            c -= 30;
            String zi2 = "要开开心心的,我永远爱你,节日快乐呀";
            String[] f2 = zi2.split(",");
            for(int i = 0 ; i < f2.length ; i++) {
                g.setColor(new Color(255,255,255));
                g.setFont(new Font("宋体",Font.BOLD,20));
                g.drawString(f2[i], c, d);
                c+=20;
            }
        }
        if(ci == 1500) {
            d += 150;
            c -= 30;
            String zi2 = "下面,我来支舞,希望给你带来快乐";
            String[] f2 = zi2.split(",");
            for(int i = 0 ; i < f2.length ; i++) {
                g.setColor(new Color(255,255,255));
                g.setFont(new Font("宋体",Font.BOLD,20));
                g.drawString(f2[i], c, d);
                c+=20;
            }
        }
    }
}
public void run(){
    int i =0;
    while(true){
        try {i+=20;
            if(i == 1600){
                File file = new File("E:\\eclipse-and-tools\\eclipse素材库\\2.mp4");
                Process  p = Runtime.getRuntime().exec("D:\\program files (x86)\\YouKu\\YoukuClient\\YoukuDesktop.exe " +file); //.exe后
            }
            paint();
            // paint1();
            Thread.sleep(30);
        } catch (Exception e) {
            e.printStackTrace();

        }
    }
}
public static void main(String[] args) throws IOException {
    (new Thread(new d())).start();
}

}

  • 37
    点赞
  • 259
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值