>  기사  >  Java  >  낭만적인 유성 고백을 구현하기 위해 Java를 사용하는 방법은 무엇입니까?

낭만적인 유성 고백을 구현하기 위해 Java를 사용하는 방법은 무엇입니까?

PHPz
PHPz앞으로
2023-04-20 22:10:111767검색

소개

이 문서에서 구현된 기능은 다음과 같습니다.

1. 음악 재생

2. 유성 수, 비행 속도, 후광 크기, 유성 크기

3. 사용된 지식 포인트는 다음과 같습니다. : :

GUI: java는 form과 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

Notes

패키지 소개 일부 사람들은 프로세스 중에 이 문제가 발생할 수 있습니다:

낭만적인 유성 고백을 구현하기 위해 Java를 사용하는 방법은 무엇입니까?실제로 열려 있어야 합니다:

낭만적인 유성 고백을 구현하기 위해 Java를 사용하는 방법은 무엇입니까?패키지를 가져오는 방법:

먼저 복사하여 붙여넣기 패키지를 프로젝트 package

다음에 입력하세요: File –> Project Structure

낭만적인 유성 고백을 구현하기 위해 Java를 사용하는 방법은 무엇입니까? 그런 다음 라이브러리, + 기호, Java

낭만적인 유성 고백을 구현하기 위해 Java를 사용하는 방법은 무엇입니까?를 클릭하여 가져오려는 파일의 위치를 ​​찾은 다음 계속 확인을 클릭하세요.

위 내용은 낭만적인 유성 고백을 구현하기 위해 Java를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제