Java实现浪漫流星表白的示例代码
作者:遇安.112 发布时间:2023-04-02 14:50:35
标签:Java,流星
介绍
本文实现的功能有:
1、播放音乐
2、自定义流星数量、飞行速度、光晕大小、流星大小
3、自定义表白话语
运用到的知识点有:
GUI:java实现窗体、Swing。其实JAVA Swing的GUI目前企业中已经不用了,主要是一些学校和培训机构用来教导学生写一些游戏、小项目,练练手的。
多线程:让cpu同一时间处理多个任务(本文中涉及到音乐、文字缓慢出现、流星线条移动)
效果图:
音乐类(其实也可以不用音乐,有些人并不喜欢):
核心代码
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
注意事项
导包过程中可能有些人会出现这种问题:
实际应该是可以打开的:
如何导包:
先要将包复制粘贴到项目包下
然后进入:File –> Project Structure
然后依次点击Libraries、+号、Java
找到你要导的文件的位置,然后一直点OK就行了。
来源:https://blog.csdn.net/qq_62731133/article/details/124871148


猜你喜欢
- MultipartResolver和ServletFileUpload冲突如果同时使用了MultipartResolver 和Servlet
- 代理模式:为其他对象提供一种代理以控制某个对象的访问。用在:在某些情况下,一个客户不想或者不能直接访问另一个对象,而代理对象可以在客户端和目
- 骑士周游问题在8x8的国际棋盘上,按照马走日的规则,验证是否能够走遍棋盘。解题思路1、创建棋盘 chessBoard,是一个二维数组。2、将
- 本文实例为大家分享了Android PickerScrollView滑动选择控件的具体使用代码,供大家参考,具体内容如下先看一下效果图1.S
- 上代码喽~package ncu.com.app.chatpter_5;import java.util.Random;//结点类class
- 前言在之前 LiveData 源码浅析的博客中提到了 ViewModel 组件,当时对 ViewModel 的解释是 “
- 本文实例为大家分享了C#实现简单的计算器小功能的具体代码,供大家参考,具体内容如下先来张效果图吧(5分钟写好,莫怪)代码:数字按钮绑定的是b
- 前言老师要求我们学生做一套拍照身份验证系统,经过长时间的学习,有了这篇文章,希望能帮到读者们。正文首先介绍本文的主角:AForge创建一个C
- 先要把word或ppt转换为pdf; 以pdf的格式展示,防止文件拷贝。转换方法1、安装Word、Excel、PowerPoint组件注意:
- 我们在代码中经常使用using保障非托管资源的释放 static void Main(string[] args){
- 一直使用的是FastJson,感觉还不错,很方便。看了一段别人的分析,觉得很有道理。为什么要使用Fastjson,其实原因不需要太多,喜欢就
- 前言MyBatis常用标签及标签使用技巧MyBatis的常用标签有很多,比如<sql id="">:预定义可
- 要“监听”事件,我们总是可以将“ * ”作为事件源中的另一个方法写入事件,但这将使事件源与 * 的逻辑紧密耦合。对于实际事件,我们比直接方法
- 1.super介绍我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。用于访问父类的属性,方法,构造器2.super
- 什么是异常?在程序的运行或者编译时,所产生的错误统称为异常 (也叫Bug)异常的存在形式异常在java中以类的形式存在,每一个异常类都可以创
- 1. Spring 是什么我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是一个开源框架,有
- 本文实例讲述了Android简单创建一个Activity的方法。分享给大家供大家参考,具体如下:1) 创建一个android项目填写项目信息
- 前言在服务器上,当我们启动了tomcat,就可以以http://ip地址:8080/文件路径/文件名的方式,进行访问到我们服务器上处于tom
- 查看公司项目代码时,存在这样一个问题:winform界面上有很多信息填写,提交
- 1.object.toString()方法这种方法要注意的是object不能为null,否则会报NullPointException,一般别