文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java如何实现浪漫流星表白

2023-06-30 15:47

关注

本篇内容主要讲解“Java如何实现浪漫流星表白”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现浪漫流星表白”吧!

介绍

本文实现的功能有:

播放音乐

自定义流星数量、飞行速度、光晕大小、流星大小

自定义表白话语 

运用到的知识点有:

GUI:java实现窗体、Swing。其实JAVA Swing的GUI目前企业中已经不用了,主要是一些学校和培训机构用来教导学生写一些游戏、小项目,练练手的。 

多线程:让cpu同一时间处理多个任务(本文中涉及到音乐、文字缓慢出现、流星线条移动)

效果图:

Java如何实现浪漫流星表白

音乐类(其实也可以不用音乐,有些人并不喜欢): 

核心代码

import javazoom.jl.decoder.JavaLayerException;import javazoom.jl.player.Player; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException; public class MusicThread extends Thread{    @Override    public void run() {        //播放音乐        System.out.println("开始播放");        //表示音乐文件        File f = new File("nv.mp3");        //第三方jar包  Player类         try {            Player p = new Player(new FileInputStream(f));//参数:文件输入流对象            // p.play();        } catch (FileNotFoundException | JavaLayerException e) {            e.printStackTrace();        }     }}

实现类: 

import javazoom.jl.decoder.JavaLayerException;import javazoom.jl.player.Player; import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;import java.util.Random;import javax.swing.*; public class MeteorFly extends JFrame {    int AppletWidth, AppletHeight;    final int MAX = 6; // (~)流星的个数    final int SLEEP = 2; // 流星飞行的速度(数值越大,速度越慢)    final int COLORLV = 1; // (~)色阶(可改变光晕大小)    final int SIZE = 3 ; // (~)流星大小    private MyPanel panel;    public MeteorFly() {        panel = new MyPanel();        this.setTitle("LOVE");        this.getContentPane().add(panel);        this.setSize(AppletWidth, AppletHeight); // 创建窗体        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        this.setVisible(true);    }    public static void main(String[] args) {        new Thread(){            @Override            public void run() {                //声明一个File对象                File mp3 = new File("nv.mp3");                //创建一个输入流                FileInputStream fileInputStream = null;                 try {                    fileInputStream = new FileInputStream(mp3);                    //创建一个缓冲流                    BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);                    //创建播放器对象,把文件的缓冲流传入进去                    Player player = new Player(fileInputStream);                    //调用播放方法进行播放                    player.play();                } catch (FileNotFoundException e) {                    e.printStackTrace();                } catch (JavaLayerException e) {                    e.printStackTrace();                }            }        }.start();        new MeteorFly();    }     class MyPanel extends JPanel implements Runnable {        Meteor p[];        BufferedImage OffScreen;        Graphics drawOffScreen;        Thread pThread;        Font drawFont = new Font("Arial",0,28);        public MyPanel() {            //setBackground(Color.black); //窗体初始化            AppletWidth = Toolkit.getDefaultToolkit().getScreenSize().width;            AppletHeight = Toolkit.getDefaultToolkit().getScreenSize().height-200;            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();             new Thread(){                @Override                public void run() {                    try {                        sleep(2000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    str1 = "流星雨是世间宝藏,而你是我的人间理想";                    while(true){                            try {                                sleep(150);                            } catch (InterruptedException e) {                                e.printStackTrace();                            }                            pos++;                            if (pos > str1.length() - 1) {                                pos = str1.length() - 1;                                break;                            }                    }                }            }.start();         }        int pos = 0;        String str1 = "                                                                   ";        @Override        public void paintComponent(Graphics g) {            super.paintComponents(g);            g.drawImage(OffScreen, 0, 0, this);            g.setColor(Color.pink);            g.setFont(new Font("宋体", Font.BOLD, 50));            g.drawString(str1.substring(0,pos+1),260,700);        }        @Override         public void run() {            while (true) {                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;                    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) {                }            }        }    }    class Meteor { // 流星类        int x, y; // 流星的位置        int mx, my; // 下落速度        Color color; // 流星颜色        Random r = new Random();        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 = r.nextInt(2)+2; //随机生成下落速度和角度            my = 1;            color = new Color(                        // 随机颜色                    (new Double(Math.random() *128 )).intValue() +128 ,                        (new Double(Math.random() *128 )).intValue() +128 ,                        (new Double(Math.random() * 128)).intValue() + 128);        }    }}

这里的Player类需要自己导包,包我放在这个链接里了:

链接  提取码: v22q

注意事项

导包过程中可能有些人会出现这种问题:

Java如何实现浪漫流星表白

实际应该是可以打开的: 

Java如何实现浪漫流星表白

如何导包:

先要将包复制粘贴到项目包下

然后进入:File &ndash;> Project Structure

Java如何实现浪漫流星表白

然后依次点击Libraries、+号、Java

Java如何实现浪漫流星表白

找到你要导的文件的位置,然后一直点OK就行了。

到此,相信大家对“Java如何实现浪漫流星表白”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯