服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java实现浪漫流星表白的示例代码

Java实现浪漫流星表白的示例代码

2022-12-20 17:07遇安.112 Java教程

本文将利用Java语言实现浪漫流星表白,可以实现这些功能:播放音乐、自定义流星数量、飞行速度、光晕大小、流星大小,自定义表白话语,感兴趣的可以学习一下

介绍

本文实现的功能有:

1、播放音乐

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

3、自定义表白话语

运用到的知识点有:

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 –> Project Structure

Java实现浪漫流星表白的示例代码

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

Java实现浪漫流星表白的示例代码

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

以上就是Java实现浪漫流星表白的示例代码的详细内容,更多关于Java流星的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/qq_62731133/article/details/124871148

延伸 · 阅读

精彩推荐
  • Java教程详解MyEclipse中搭建spring-boot+mybatis+freemarker框架

    详解MyEclipse中搭建spring-boot+mybatis+freemarker框架

    这篇文章主要介绍了详解MyEclipse中搭建spring-boot+mybatis+freemarker框架,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    mmliuman6492021-01-14
  • Java教程@RequestParam 参数偶尔丢失的解决

    @RequestParam 参数偶尔丢失的解决

    这篇文章主要介绍了@RequestParam 参数偶尔丢失的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    QMCoder4532022-02-28
  • Java教程Java 封装的使用详解

    Java 封装的使用详解

    在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障...

    兮动人11092022-07-07
  • Java教程详解Java中Method的Invoke方法

    详解Java中Method的Invoke方法

    这篇文章主要介绍了详解Java中Method的Invoke方法,需要的朋友可以参考下...

    动力节点7772021-01-21
  • Java教程浅谈Storm在zookeeper上的目录结构

    浅谈Storm在zookeeper上的目录结构

    这篇文章主要介绍了浅谈Storm在zookeeper上的目录结构的相关内容,涉及storm使用zookeeper的操作以及详细结构图,具有一定参考价值,需要的朋友可以了解下。...

    不懂6282021-01-18
  • Java教程Netty 基石,Java NIO 核心知识

    Netty 基石,Java NIO 核心知识

    在深入 Netty 之前,我觉得有必要先对齐一下 Java NIO 的基础知识,因为 Netty 对底层网络 I/O 的操作就是基于 Java NIO 的,所以有必要了解一下。...

    yes的练级攻略7422021-12-27
  • Java教程Java观察者模式例子

    Java观察者模式例子

    这篇文章主要介绍了Java观察者模式例子的相关资料,需要的朋友可以参考下 ...

    MRR2642020-03-09
  • Java教程Java中的魔法类:sun.misc.Unsafe示例详解

    Java中的魔法类:sun.misc.Unsafe示例详解

    Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的。如果你想搞破坏,可以使用Unsafe这个类。下面这...

    素轩5722021-05-04