基于Java的音游项目

一、项目效果演示

1.1 游戏主界面

在这里插入图片描述

1.2 音乐选择界面

在这里插入图片描述
在这里插入图片描述

1.3 游戏界面

在这里插入图片描述

二、项目结构

2.1 src

在这里插入图片描述

2.2 images

在这里插入图片描述
在这里插入图片描述

2.3 Mstw

在这里插入图片描述

2.4 music

在这里插入图片描述

三、Code

3.1 Main.java

package Mstw;

//用来执行整个程序的主类
public class Main {

    public static final int screen_width = 1920;    //设置宽度
    public static final int screen_height = 1080;   //设置高度
    public static final int sleep_time = 10;        //设置下落间隔时间
    public static final int reach_time = 2;         //用来调整的时间
    public static int note_speed = 3;         //设置方块下落速度
    public static int scout;                        //游戏中的得分数
    //执行整个程序的主函数
    public static void main(String[] args) {

        new Mstw();

    }
}


3.2 Beat.java

package Mstw;

public class Beat {
    private int time;
    private String noteName;

    public int getTime(){
        return time;
    }
    public void setTime(int time){
        this.time = time;
    }
    public String getNoteName(){
        return noteName;
    }
    public void setNoteName(String noteName){
        this.noteName = noteName;
    }
    public Beat(int time, String noteName){
        super();
        this.time = time;
        this.noteName = noteName;
    }

}


3.3 Game.java

package Mstw;

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;

public class Game extends Thread {

    private Image gameInfoImage = new ImageIcon(Main.class.getResource("../images/gameInfo.png")).getImage();
    private Image judgementLineImage = new ImageIcon(Main.class.getResource("../images/judgementLine.png")).getImage();
    private Image noteRouteLineImage = new ImageIcon(Main.class.getResource("../images/noteRouteLine.png")).getImage();
    //每个按键控制一个区域
    private Image noteRouteSImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    private Image noteRouteDImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    private Image noteRouteFImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    private Image noteRouteSpaceImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    private Image noteRouteJImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    private Image noteRouteKImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    private Image noteRouteLImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    private Image blueFlareImage;
    private Image judgeImage;

    private String titleName;   //歌曲名称
    private String difficulty;  //难度
    private String musicTitle;  //歌曲MP3
    private Music gameMusic;

    ArrayList<Note> noteList = new ArrayList<Note>();


    public Game(String titleName, String difficulty, String musicTitle) {
        this.titleName = titleName;
        this.difficulty = difficulty;
        this.musicTitle = musicTitle;
        gameMusic = new Music(this.musicTitle, false);
    }


    public void screenDraw(Graphics2D g) {

        g.drawImage(gameInfoImage, 0, 1020, null);
        g.drawImage(judgementLineImage, 0, 920, null);   //方块判定界面
        //方块下落路径和间隙
        g.drawImage(noteRouteLineImage, 419, 0, null);
        g.drawImage(noteRouteSImage, 423, 0, null);
        g.drawImage(noteRouteLineImage, 573, 0, null);
        g.drawImage(noteRouteDImage, 577, 0, null);
        g.drawImage(noteRouteLineImage, 727, 0, null);
        g.drawImage(noteRouteFImage, 731, 0, null);
        g.drawImage(noteRouteLineImage, 881, 0, null);
        g.drawImage(noteRouteSpaceImage, 885, 0, null);
        g.drawImage(noteRouteLineImage, 1035, 0, null);
        g.drawImage(noteRouteJImage, 1039, 0, null);
        g.drawImage(noteRouteLineImage, 1189, 0, null);
        g.drawImage(noteRouteKImage, 1193, 0, null);
        g.drawImage(noteRouteLineImage, 1343, 0, null);
        g.drawImage(noteRouteLImage, 1347, 0, null);
        g.drawImage(noteRouteLineImage, 1497, 0, null);

        for (int i = 0; i < noteList.size(); i++) {
            Note note = noteList.get(i);
            if (note.getY() > 960){
                judgeImage = new ImageIcon(Main.class.getResource("../images/judgeMiss.png")).getImage();
            }
            if (!note.isProceeded()){
                noteList.remove(i);
                i--;
            }
            else {
                note.screenDraw(g);
            }
        }

        //设置白色字体
        g.setColor(Color.white);
        //让字体平滑
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g.setFont(new Font("Arial", Font.BOLD, 30));
        g.drawString(titleName, 30, 1065);
        g.drawString(difficulty, 1800, 1065);
        //设置字母位置和颜色
        g.setFont(new Font("Arial", Font.PLAIN, 30));
        g.setColor(Color.GREEN);
        g.drawString("S", 498, 950);
        g.drawString("D", 652, 950);
        g.drawString("F", 806, 950);
        g.drawString("Space", 920, 950);
        g.drawString("J", 1110, 950);
        g.drawString("K", 1268, 950);
        g.drawString("L", 1422, 950);
        g.setColor(Color.LIGHT_GRAY);
        g.setFont(new Font("Elephant", Font.BOLD, 30));
        //显示当前得分
        g.drawString(" "+Main.scout, 920, 1065);
        if(Main.scout >= 1000){
            Main.note_speed = 6;
        }
        g.drawImage(blueFlareImage, 360, 500, null);
        g.drawImage(judgeImage, 780, 730, null);
    }

    //按下键盘上相应键的行为的函数,按下和松开
    //S
    public void pressS() {
        judge("S");
        noteRouteSImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
        new Music("PressedKeyboardMusic.mp3", false).start();
    }

    public void releaseS() {
        noteRouteSImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    }

    //D
    public void pressD() {
        judge("D");
        noteRouteDImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
        new Music("PressedKeyboardMusic.mp3", false).start();
    }

    public void releaseD() {
        noteRouteDImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    }

    //F
    public void pressF() {
        judge("F");
        noteRouteFImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
        new Music("PressedKeyboardMusic.mp3", false).start();
    }

    public void releaseF() {
        noteRouteFImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    }

    //Space
    public void pressSpace() {
        judge("Space");
        noteRouteSpaceImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
        new Music("PressedKeyboardMusic.mp3", false).start();
    }

    public void releaseSpace() {
        noteRouteSpaceImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    }

    //J
    public void pressJ() {
        judge("J");
        noteRouteJImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
        new Music("PressedKeyboardMusic.mp3", false).start();
    }

    public void releaseJ() {
        noteRouteJImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    }

    //K
    public void pressK() {
        judge("K");
        noteRouteKImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
        new Music("PressedKeyboardMusic.mp3", false).start();
    }

    public void releaseK() {
        noteRouteKImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    }

    //L
    public void pressL() {
        judge("L");
        noteRouteLImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
        new Music("PressedKeyboardMusic.mp3", false).start();
    }

    public void releaseL() {
        noteRouteLImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
    }


    @Override
    public void run() {
        dropNotes(this.titleName);
    }

    public void close() {
        gameMusic.close();
        this.interrupt();
    }

    //下落方块
    public void dropNotes(String titleName) {
//        noteList.add(new Note(425, 600));
//        noteList.add(new Note(579, 555));
//        noteList.add(new Note(733, 500));
//        noteList.add(new Note(887, 340));
//        noteList.add(new Note(1041, 480));
//        noteList.add(new Note(1195, 650));
//        noteList.add(new Note(1349, 340));
        Beat[] beats = null;
        //根据选择的歌曲和难度制定节拍
        if (titleName.equals("Celebrate - Joakim Karud") && difficulty.equals("Easy")){
            int startTime = 2750 - Main.reach_time * 1000;  //设置起始时间
            int gap = 150;     //用来制定节拍的间隔
            beats = new Beat[]{
                    //节拍学习过程
                    new Beat(startTime, "S"),
                    new Beat(startTime + gap * 2, "D"),
                    new Beat(startTime + gap * 4, "S"),
                    new Beat(startTime + gap * 6, "D"),
                    new Beat(startTime + gap * 8, "S"),
                    new Beat(startTime + gap * 10, "D"),
                    new Beat(startTime + gap * 12 - 80, "S"),
                    new Beat(startTime + gap * 14 - 130, "D"),
                    new Beat(startTime + gap * 15, "F"),
                    new Beat(startTime + gap * 18, "J"),
                    new Beat(startTime + gap * 20 - 80, "K"),
                    new Beat(startTime + gap * 22 - 130, "L"),
                    new Beat(startTime + gap * 23, "J"),
                    new Beat(startTime + gap * 24, "K"),
                    new Beat(startTime + gap * 25, "J"),
                    new Beat(startTime + gap * 26, "K"),
                    new Beat(startTime + gap * 27, "L"),
                    new Beat(startTime + gap * 28, "Space"),

//                    new Beat(startTime + gap * 36, "D"),
//                    new Beat(startTime + gap * 38, "S"),
//                    new Beat(startTime + gap * 40, "D"),
//                    new Beat(startTime + gap * 42, "S"),
//                    new Beat(startTime + gap * 44, "D"),
//                    new Beat(startTime + gap * 46, "S"),
//                    new Beat(startTime + gap * 48, "D"),
//                    new Beat(startTime + gap * 50, "F"),
//                    new Beat(startTime + gap * 52, "J"),
//                    new Beat(startTime + gap * 54, "K"),
//                    new Beat(startTime + gap * 56, "L"),
//                    new Beat(startTime + gap * 58, "J"),
//                    new Beat(startTime + gap * 60, "K"),
//                    new Beat(startTime + gap * 62, "J"),
//                    new Beat(startTime + gap * 64, "K"),
//                    new Beat(startTime + gap * 66, "L"),
//                    new Beat(startTime + gap * 68, "Space"),
//                    new Beat(startTime + gap * 70, "D"),
//                    new Beat(startTime + gap * 72, "S"),
//                    new Beat(startTime + gap * 74, "D"),
//                    new Beat(startTime + gap * 76, "S"),
//                    new Beat(startTime + gap * 78, "D"),
//                    new Beat(startTime + gap * 80, "S"),
//                    new Beat(startTime + gap * 82, "D"),
//                    new Beat(startTime + gap * 84, "F"),
//                    new Beat(startTime + gap * 86, "J"),

                    new Beat(startTime + gap * 88, "S"),
                    new Beat(startTime + gap * 90, "D"),
                    new Beat(startTime + gap * 92, "S"),
                    new Beat(startTime + gap * 94, "D"),
                    new Beat(startTime + gap * 96, "J"),
                    new Beat(startTime + gap * 98, "K"),
                    new Beat(startTime + gap * 100, "J"),
                    new Beat(startTime + gap * 102, "K"),
                    new Beat(startTime + gap * 104, "D"),
                    new Beat(startTime + gap * 106, "F"),
                    new Beat(startTime + gap * 108, "L"),
                    new Beat(startTime + gap * 110, "Space"),
                    new Beat(startTime + gap * 112, "S"),
                    new Beat(startTime + gap * 114, "J"),

                    new Beat(startTime + gap * 116, "K"),
                    new Beat(startTime + gap * 118, "L"),
                    new Beat(startTime + gap * 120, "J"),
                    new Beat(startTime + gap * 122, "K"),
                    new Beat(startTime + gap * 124, "J"),
                    new Beat(startTime + gap * 126, "K"),
                    new Beat(startTime + gap * 128, "L"),
                    new Beat(startTime + gap * 130, "Space"),
                    new Beat(startTime + gap * 132, "D"),
                    new Beat(startTime + gap * 134, "S"),
                    new Beat(startTime + gap * 136, "D"),
                    new Beat(startTime + gap * 138, "S"),
                    new Beat(startTime + gap * 140, "D"),
                    new Beat(startTime + gap * 142, "S"),
                    new Beat(startTime + gap * 144, "K"),
                    new Beat(startTime + gap * 146, "L"),
                    new Beat(startTime + gap * 148, "J"),
                    new Beat(startTime + gap * 150, "K"),
                    new Beat(startTime + gap * 152, "J"),
                    new Beat(startTime + gap * 154, "K"),
                    new Beat(startTime + gap * 156, "L"),
                    new Beat(startTime + gap * 158, "Space"),
                    new Beat(startTime + gap * 160, "S"),
                    new Beat(startTime + gap * 162, "D"),
                    new Beat(startTime + gap * 164, "F"),
                    new Beat(startTime + gap * 166, "J"),
                    new Beat(startTime + gap * 168, "K"),
                    new Beat(startTime + gap * 170, "L"),

                    new Beat(startTime + gap * 172, "S"),
                    new Beat(startTime + gap * 174, "D"),
                    new Beat(startTime + gap * 176, "S"),
                    new Beat(startTime + gap * 178, "J"),
                    new Beat(startTime + gap * 180, "K"),
                    new Beat(startTime + gap * 182, "J"),
                    new Beat(startTime + gap * 184, "D"),
                    new Beat(startTime + gap * 186, "F"),
                    new Beat(startTime + gap * 188, "D"),
                    new Beat(startTime + gap * 190, "K"),
                    new Beat(startTime + gap * 192, "L"),
                    new Beat(startTime + gap * 194, "K"),
                    new Beat(startTime + gap * 196, "Space"),
                    new Beat(startTime + gap * 198, "S"),
                    new Beat(startTime + gap * 200, "D"),
                    new Beat(startTime + gap * 202, "F"),

                    new Beat(startTime + gap * 204, "D"),
                    new Beat(startTime + gap * 206, "S"),
                    new Beat(startTime + gap * 208, "K"),
                    new Beat(startTime + gap * 210, "L"),
                    new Beat(startTime + gap * 212, "J"),
                    new Beat(startTime + gap * 214, "K"),
                    new Beat(startTime + gap * 216, "J"),
                    new Beat(startTime + gap * 218, "K"),
                    new Beat(startTime + gap * 220, "L"),
                    new Beat(startTime + gap * 222, "Space"),
                    new Beat(startTime + gap * 224, "D"),
                    new Beat(startTime + gap * 226, "S"),
                    new Beat(startTime + gap * 228, "D"),
                    new Beat(startTime + gap * 230, "S"),
                    new Beat(startTime + gap * 232, "D"),
                    new Beat(startTime + gap * 234, "S"),

                    new Beat(startTime + gap * 236, "K"),
                    new Beat(startTime + gap * 238, "L"),
                    new Beat(startTime + gap * 240, "J"),
                    new Beat(startTime + gap * 242, "K"),
                    new Beat(startTime + gap * 244, "J"),
                    new Beat(startTime + gap * 246, "K"),
                    new Beat(startTime + gap * 248, "L"),
                    new Beat(startTime + gap * 250, "Space"),
                    new Beat(startTime + gap * 252, "S"),
                    new Beat(startTime + gap * 254, "D"),
                    new Beat(startTime + gap * 256, "S"),
                    new Beat(startTime + gap * 258, "J"),
                    new Beat(startTime + gap * 260, "K"),
                    new Beat(startTime + gap * 262, "J"),
                    new Beat(startTime + gap * 264, "Space"),

                    new Beat(startTime + gap * 266, "S"),
                    new Beat(startTime + gap * 268, "D"),
                    new Beat(startTime + gap * 270, "S"),
                    new Beat(startTime + gap * 272, "D"),
                    new Beat(startTime + gap * 274, "S"),
                    new Beat(startTime + gap * 276, "D"),
                    new Beat(startTime + gap * 278 - 80, "S"),
                    new Beat(startTime + gap * 280 - 130, "D"),
                    new Beat(startTime + gap * 281, "F"),
                    new Beat(startTime + gap * 284, "J"),
                    new Beat(startTime + gap * 286 - 80, "K"),
                    new Beat(startTime + gap * 288 - 130, "L"),
                    new Beat(startTime + gap * 289, "J"),
                    new Beat(startTime + gap * 290, "K"),
                    new Beat(startTime + gap * 291, "J"),
                    new Beat(startTime + gap * 292, "K"),
                    new Beat(startTime + gap * 293, "L"),
                    new Beat(startTime + gap * 294, "Space"),

                    new Beat(startTime + gap * 296, "D"),
                    new Beat(startTime + gap * 298, "S"),
                    new Beat(startTime + gap * 300, "K"),
                    new Beat(startTime + gap * 302, "L"),
                    new Beat(startTime + gap * 304, "J"),
                    new Beat(startTime + gap * 306, "K"),
                    new Beat(startTime + gap * 308, "J"),
                    new Beat(startTime + gap * 310, "K"),
                    new Beat(startTime + gap * 312, "L"),
                    new Beat(startTime + gap * 314, "Space"),
                    new Beat(startTime + gap * 316, "D"),
                    new Beat(startTime + gap * 318, "S"),
                    new Beat(startTime + gap * 320, "D"),
                    new Beat(startTime + gap * 322, "S"),
                    new Beat(startTime + gap * 324, "D"),
                    new Beat(startTime + gap * 326, "S"),

                    new Beat(startTime + gap * 328, "K"),
                    new Beat(startTime + gap * 330, "L"),
                    new Beat(startTime + gap * 332, "J"),
                    new Beat(startTime + gap * 334, "K"),
                    new Beat(startTime + gap * 336, "J"),
                    new Beat(startTime + gap * 338, "K"),
                    new Beat(startTime + gap * 340, "L"),
                    new Beat(startTime + gap * 342, "Space"),
                    new Beat(startTime + gap * 344, "S"),
                    new Beat(startTime + gap * 346, "D"),
                    new Beat(startTime + gap * 348, "S"),
                    new Beat(startTime + gap * 350, "J"),
                    new Beat(startTime + gap * 352, "K"),
                    new Beat(startTime + gap * 354, "J"),
                    new Beat(startTime + gap * 356, "Space"),
            };
        }
        else if (titleName.equals("Celebrate - Joakim Karud") && difficulty.equals("Hard")){
            int startTime = 2750 - Main.reach_time * 1000;
            int gap = 125;     //用来制定节拍的间隔
            Main.note_speed = 4;
            beats = new Beat[]{
                    //节拍学习过程
                    new Beat(startTime, "S"),
                    new Beat(startTime, "J"),
                    new Beat(startTime + gap * 2, "D"),
                    new Beat(startTime + gap * 2, "K"),
                    new Beat(startTime + gap * 4, "S"),
                    new Beat(startTime + gap * 4, "J"),
                    new Beat(startTime + gap * 6, "D"),
                    new Beat(startTime + gap * 6, "K"),
                    new Beat(startTime + gap * 8, "S"),
                    new Beat(startTime + gap * 8, "J"),
                    new Beat(startTime + gap * 10, "D"),
                    new Beat(startTime + gap * 10, "K"),
                    new Beat(startTime + gap * 12 - 80, "S"),
                    new Beat(startTime + gap * 12 - 80, "J"),

                    new Beat(startTime + gap * 14 - 130, "D"),
                    new Beat(startTime + gap * 14 - 130, "K"),
                    new Beat(startTime + gap * 15, "F"),
                    new Beat(startTime + gap * 15, "L"),
                    new Beat(startTime + gap * 18, "J"),
                    new Beat(startTime + gap * 18, "S"),
                    new Beat(startTime + gap * 20 - 80, "K"),
                    new Beat(startTime + gap * 20 - 80, "D"),
                    new Beat(startTime + gap * 22 - 130, "L"),
                    new Beat(startTime + gap * 22 - 130, "F"),
                    new Beat(startTime + gap * 23, "J"),
                    new Beat(startTime + gap * 23, "F"),
                    new Beat(startTime + gap * 24, "K"),
                    new Beat(startTime + gap * 24, "D"),
                    new Beat(startTime + gap * 25, "J"),
                    new Beat(startTime + gap * 25, "F"),
                    new Beat(startTime + gap * 26, "K"),
                    new Beat(startTime + gap * 26, "D"),
                    new Beat(startTime + gap * 27, "L"),
                    new Beat(startTime + gap * 27, "L"),
                    new Beat(startTime + gap * 28, "Space"),

                    new Beat(startTime + gap * 36, "D"),
                    new Beat(startTime + gap * 38, "S"),
                    new Beat(startTime + gap * 40, "D"),
                    new Beat(startTime + gap * 42, "S"),
                    new Beat(startTime + gap * 44, "D"),
                    new Beat(startTime + gap * 46, "S"),
                    new Beat(startTime + gap * 48, "D"),
                    new Beat(startTime + gap * 50, "F"),
                    new Beat(startTime + gap * 52, "J"),
                    new Beat(startTime + gap * 54, "K"),
                    new Beat(startTime + gap * 56, "L"),
                    new Beat(startTime + gap * 58, "J"),
                    new Beat(startTime + gap * 60, "K"),
                    new Beat(startTime + gap * 62, "J"),
                    new Beat(startTime + gap * 64, "K"),
                    new Beat(startTime + gap * 66, "L"),
                    new Beat(startTime + gap * 68, "Space"),
//                    new Beat(startTime + gap * 70, "D"),
//                    new Beat(startTime + gap * 72, "S"),
//                    new Beat(startTime + gap * 74, "D"),
//                    new Beat(startTime + gap * 76, "S"),
//                    new Beat(startTime + gap * 78, "D"),
//                    new Beat(startTime + gap * 80, "S"),
//                    new Beat(startTime + gap * 82, "D"),
//                    new Beat(startTime + gap * 84, "F"),
//                    new Beat(startTime + gap * 86, "J"),

                    new Beat(startTime + gap * 88, "S"),
                    new Beat(startTime + gap * 89, "D"),
                    new Beat(startTime + gap * 90, "S"),
                    new Beat(startTime + gap * 91, "D"),
                    new Beat(startTime + gap * 92, "J"),
                    new Beat(startTime + gap * 93, "K"),
                    new Beat(startTime + gap * 94, "J"),
                    new Beat(startTime + gap * 95, "K"),
                    new Beat(startTime + gap * 96, "D"),
                    new Beat(startTime + gap * 97, "F"),
                    new Beat(startTime + gap * 98, "L"),
                    new Beat(startTime + gap * 99, "Space"),
                    new Beat(startTime + gap * 100, "S"),
                    new Beat(startTime + gap * 101, "J"),
                    new Beat(startTime + gap * 102, "S"),
                    new Beat(startTime + gap * 103, "D"),
                    new Beat(startTime + gap * 104, "S"),
                    new Beat(startTime + gap * 105, "D"),
                    new Beat(startTime + gap * 106, "J"),
                    new Beat(startTime + gap * 107, "K"),
                    new Beat(startTime + gap * 108, "J"),
                    new Beat(startTime + gap * 109, "K"),
                    new Beat(startTime + gap * 110, "D"),
                    new Beat(startTime + gap * 111, "F"),
                    new Beat(startTime + gap * 112, "L"),
                    new Beat(startTime + gap * 114, "Space"),
                    new Beat(startTime + gap * 114, "F"),
                    new Beat(startTime + gap * 114, "J"),

                    new Beat(startTime + gap * 116, "K"),
                    new Beat(startTime + gap * 118, "L"),
                    new Beat(startTime + gap * 120, "J"),
                    new Beat(startTime + gap * 122, "K"),
                    new Beat(startTime + gap * 124, "J"),
                    new Beat(startTime + gap * 126, "K"),
                    new Beat(startTime + gap * 128, "L"),
                    new Beat(startTime + gap * 130, "Space"),
                    new Beat(startTime + gap * 132, "D"),
                    new Beat(startTime + gap * 132, "K"),
                    new Beat(startTime + gap * 134, "S"),
                    new Beat(startTime + gap * 134, "L"),
                    new Beat(startTime + gap * 136, "D"),
                    new Beat(startTime + gap * 136, "K"),
                    new Beat(startTime + gap * 138, "S"),
                    new Beat(startTime + gap * 138, "L"),
                    new Beat(startTime + gap * 140, "D"),
                    new Beat(startTime + gap * 140, "K"),
                    new Beat(startTime + gap * 142, "S"),
                    new Beat(startTime + gap * 142, "L"),
                    new Beat(startTime + gap * 144, "K"),
                    new Beat(startTime + gap * 144, "D"),
                    new Beat(startTime + gap * 146, "S"),
                    new Beat(startTime + gap * 146, "L"),
                    new Beat(startTime + gap * 148, "F"),
                    new Beat(startTime + gap * 148, "J"),
                    new Beat(startTime + gap * 150, "D"),
                    new Beat(startTime + gap * 150, "K"),
                    new Beat(startTime + gap * 152, "F"),
                    new Beat(startTime + gap * 152, "J"),
                    new Beat(startTime + gap * 154, "D"),
                    new Beat(startTime + gap * 154, "K"),
                    new Beat(startTime + gap * 156, "F"),
                    new Beat(startTime + gap * 156, "L"),
                    new Beat(startTime + gap * 158, "Space"),
                    new Beat(startTime + gap * 160, "S"),
                    new Beat(startTime + gap * 160, "L"),
                    new Beat(startTime + gap * 162, "D"),
                    new Beat(startTime + gap * 162, "K"),
                    new Beat(startTime + gap * 164, "F"),
                    new Beat(startTime + gap * 164, "J"),
                    new Beat(startTime + gap * 166, "J"),
                    new Beat(startTime + gap * 166, "F"),
                    new Beat(startTime + gap * 168, "K"),
                    new Beat(startTime + gap * 168, "D"),
                    new Beat(startTime + gap * 170, "L"),
                    new Beat(startTime + gap * 170, "S"),

                    new Beat(startTime + gap * 172, "S"),
                    new Beat(startTime + gap * 174, "D"),
                    new Beat(startTime + gap * 176, "S"),
                    new Beat(startTime + gap * 178, "J"),
                    new Beat(startTime + gap * 180, "K"),
                    new Beat(startTime + gap * 182, "J"),
                    new Beat(startTime + gap * 184, "D"),
                    new Beat(startTime + gap * 186, "F"),
                    new Beat(startTime + gap * 188, "D"),
                    new Beat(startTime + gap * 190, "K"),
                    new Beat(startTime + gap * 192, "L"),
                    new Beat(startTime + gap * 194, "K"),
                    new Beat(startTime + gap * 196, "Space"),
                    new Beat(startTime + gap * 196, "D"),
                    new Beat(startTime + gap * 196, "F"),
                    new Beat(startTime + gap * 196, "J"),
                    new Beat(startTime + gap * 196, "K"),

                    new Beat(startTime + gap * 198, "S"),
                    new Beat(startTime + gap * 200, "D"),
                    new Beat(startTime + gap * 202, "F"),
                    new Beat(startTime + gap * 204, "D"),
                    new Beat(startTime + gap * 206, "S"),
                    new Beat(startTime + gap * 208, "K"),
                    new Beat(startTime + gap * 210, "L"),
                    new Beat(startTime + gap * 212, "J"),
                    new Beat(startTime + gap * 214, "K"),
                    new Beat(startTime + gap * 216, "J"),
                    new Beat(startTime + gap * 218, "K"),
                    new Beat(startTime + gap * 220, "L"),
                    new Beat(startTime + gap * 222, "Space"),
                    new Beat(startTime + gap * 224, "D"),
                    new Beat(startTime + gap * 224, "K"),
                    new Beat(startTime + gap * 226, "S"),
                    new Beat(startTime + gap * 226, "L"),
                    new Beat(startTime + gap * 228, "D"),
                    new Beat(startTime + gap * 228, "K"),
                    new Beat(startTime + gap * 230, "S"),
                    new Beat(startTime + gap * 230, "L"),
                    new Beat(startTime + gap * 232, "D"),
                    new Beat(startTime + gap * 232, "K"),
                    new Beat(startTime + gap * 234, "S"),
                    new Beat(startTime + gap * 234, "L"),
                    new Beat(startTime + gap * 236, "K"),
                    new Beat(startTime + gap * 236, "D"),
                    new Beat(startTime + gap * 238, "L"),
                    new Beat(startTime + gap * 238, "S"),
                    new Beat(startTime + gap * 240, "J"),
                    new Beat(startTime + gap * 240, "F"),
                    new Beat(startTime + gap * 242, "K"),
                    new Beat(startTime + gap * 242, "D"),
                    new Beat(startTime + gap * 244, "J"),
                    new Beat(startTime + gap * 244, "F"),
                    new Beat(startTime + gap * 246, "K"),
                    new Beat(startTime + gap * 246, "D"),
                    new Beat(startTime + gap * 248, "L"),
                    new Beat(startTime + gap * 248, "F"),
                    new Beat(startTime + gap * 250, "Space"),
                    new Beat(startTime + gap * 252, "S"),
                    new Beat(startTime + gap * 254, "D"),
                    new Beat(startTime + gap * 256, "S"),
                    new Beat(startTime + gap * 258, "J"),
                    new Beat(startTime + gap * 260, "K"),
                    new Beat(startTime + gap * 262, "J"),
                    new Beat(startTime + gap * 264, "Space"),

                    new Beat(startTime + gap * 266, "S"),
                    new Beat(startTime + gap * 268, "D"),
                    new Beat(startTime + gap * 270, "S"),
                    new Beat(startTime + gap * 272, "D"),
                    new Beat(startTime + gap * 274, "S"),
                    new Beat(startTime + gap * 276, "D"),
                    new Beat(startTime + gap * 278 - 80, "S"),
                    new Beat(startTime + gap * 280 - 130, "D"),
                    new Beat(startTime + gap * 281, "F"),
                    new Beat(startTime + gap * 284, "J"),
                    new Beat(startTime + gap * 286 - 80, "K"),
                    new Beat(startTime + gap * 288 - 130, "L"),
                    new Beat(startTime + gap * 289, "J"),
                    new Beat(startTime + gap * 290, "K"),
                    new Beat(startTime + gap * 291, "J"),
                    new Beat(startTime + gap * 292, "K"),
                    new Beat(startTime + gap * 293, "L"),
                    new Beat(startTime + gap * 294, "Space"),

                    new Beat(startTime + gap * 296, "D"),
                    new Beat(startTime + gap * 298, "S"),
                    new Beat(startTime + gap * 300, "K"),
                    new Beat(startTime + gap * 302, "L"),
                    new Beat(startTime + gap * 304, "J"),
                    new Beat(startTime + gap * 306, "K"),
                    new Beat(startTime + gap * 308, "J"),
                    new Beat(startTime + gap * 310, "K"),
                    new Beat(startTime + gap * 312, "L"),
                    new Beat(startTime + gap * 314, "Space"),
                    new Beat(startTime + gap * 316, "D"),
                    new Beat(startTime + gap * 316, "K"),
                    new Beat(startTime + gap * 318, "S"),
                    new Beat(startTime + gap * 318, "L"),
                    new Beat(startTime + gap * 320, "D"),
                    new Beat(startTime + gap * 320, "K"),
                    new Beat(startTime + gap * 322, "S"),
                    new Beat(startTime + gap * 322, "L"),
                    new Beat(startTime + gap * 324, "D"),
                    new Beat(startTime + gap * 324, "K"),
                    new Beat(startTime + gap * 326, "S"),
                    new Beat(startTime + gap * 326, "L"),
                    new Beat(startTime + gap * 328, "K"),
                    new Beat(startTime + gap * 328, "D"),
                    new Beat(startTime + gap * 330, "L"),
                    new Beat(startTime + gap * 330, "S"),
                    new Beat(startTime + gap * 332, "J"),
                    new Beat(startTime + gap * 332, "F"),
                    new Beat(startTime + gap * 334, "K"),
                    new Beat(startTime + gap * 334, "D"),
                    new Beat(startTime + gap * 336, "J"),
                    new Beat(startTime + gap * 336, "F"),
                    new Beat(startTime + gap * 338, "K"),
                    new Beat(startTime + gap * 338, "D"),
                    new Beat(startTime + gap * 340, "L"),
                    new Beat(startTime + gap * 340, "S"),
                    new Beat(startTime + gap * 342, "Space"),

                    new Beat(startTime + gap * 344, "S"),
                    new Beat(startTime + gap * 346, "D"),
                    new Beat(startTime + gap * 348, "S"),
                    new Beat(startTime + gap * 350, "J"),
                    new Beat(startTime + gap * 352, "K"),
                    new Beat(startTime + gap * 354, "J"),
                    new Beat(startTime + gap * 356, "Space"),
                    new Beat(startTime + gap * 356, "S"),
                    new Beat(startTime + gap * 356, "D"),
                    new Beat(startTime + gap * 356, "F"),
                    new Beat(startTime + gap * 356, "J"),
                    new Beat(startTime + gap * 356, "K"),
                    new Beat(startTime + gap * 356, "L"),

            };
        }
        else if (titleName.equals("Future Funk - Joakim Karud") && difficulty.equals("Easy")){
            int startTime = 2750 - Main.reach_time * 1000;  //设置起始时间
            int gap = 150;     //用来制定节拍的间隔
            beats = new Beat[]{
                    //节拍学习过程
                    new Beat(startTime, "S"),
                    new Beat(startTime + gap * 2, "D"),
                    new Beat(startTime + gap * 4, "S"),
                    new Beat(startTime + gap * 6, "D"),
                    new Beat(startTime + gap * 8, "S"),
                    new Beat(startTime + gap * 10, "D"),
                    new Beat(startTime + gap * 12 - 80, "S"),
                    new Beat(startTime + gap * 14 - 130, "D"),
                    new Beat(startTime + gap * 15, "F"),
                    new Beat(startTime + gap * 18, "J"),
                    new Beat(startTime + gap * 20 - 80, "K"),
                    new Beat(startTime + gap * 22 - 130, "L"),
                    new Beat(startTime + gap * 23, "J"),
                    new Beat(startTime + gap * 24, "K"),
                    new Beat(startTime + gap * 25, "J"),
                    new Beat(startTime + gap * 26, "K"),
                    new Beat(startTime + gap * 27, "L"),
                    new Beat(startTime + gap * 28, "Space"),

                    new Beat(startTime + gap * 88, "S"),
                    new Beat(startTime + gap * 90, "D"),
                    new Beat(startTime + gap * 92, "S"),
                    new Beat(startTime + gap * 94, "D"),
                    new Beat(startTime + gap * 96, "J"),
                    new Beat(startTime + gap * 98, "K"),
                    new Beat(startTime + gap * 100, "J"),
                    new Beat(startTime + gap * 102, "K"),
                    new Beat(startTime + gap * 104, "D"),
                    new Beat(startTime + gap * 106, "F"),
                    new Beat(startTime + gap * 108, "L"),
                    new Beat(startTime + gap * 110, "Space"),
                    new Beat(startTime + gap * 112, "S"),
                    new Beat(startTime + gap * 114, "J"),

                    new Beat(startTime + gap * 116, "K"),
                    new Beat(startTime + gap * 118, "L"),
                    new Beat(startTime + gap * 120, "J"),
                    new Beat(startTime + gap * 122, "K"),
                    new Beat(startTime + gap * 124, "J"),
                    new Beat(startTime + gap * 126, "K"),
                    new Beat(startTime + gap * 128, "L"),
                    new Beat(startTime + gap * 130, "Space"),
                    new Beat(startTime + gap * 132, "D"),
                    new Beat(startTime + gap * 134, "S"),
                    new Beat(startTime + gap * 136, "D"),
                    new Beat(startTime + gap * 138, "S"),
                    new Beat(startTime + gap * 140, "D"),
                    new Beat(startTime + gap * 142, "S"),
                    new Beat(startTime + gap * 144, "K"),
                    new Beat(startTime + gap * 146, "L"),
                    new Beat(startTime + gap * 148, "J"),
                    new Beat(startTime + gap * 150, "K"),
                    new Beat(startTime + gap * 152, "J"),
                    new Beat(startTime + gap * 154, "K"),
                    new Beat(startTime + gap * 156, "L"),
                    new Beat(startTime + gap * 158, "Space"),
                    new Beat(startTime + gap * 160, "S"),
                    new Beat(startTime + gap * 162, "D"),
                    new Beat(startTime + gap * 164, "F"),
                    new Beat(startTime + gap * 166, "J"),
                    new Beat(startTime + gap * 168, "K"),
                    new Beat(startTime + gap * 170, "L"),

                    new Beat(startTime + gap * 172, "S"),
                    new Beat(startTime + gap * 174, "D"),
                    new Beat(startTime + gap * 176, "S"),
                    new Beat(startTime + gap * 178, "J"),
                    new Beat(startTime + gap * 180, "K"),
                    new Beat(startTime + gap * 182, "J"),
                    new Beat(startTime + gap * 184, "D"),
                    new Beat(startTime + gap * 186, "F"),
                    new Beat(startTime + gap * 188, "D"),
                    new Beat(startTime + gap * 190, "K"),
                    new Beat(startTime + gap * 192, "L"),
                    new Beat(startTime + gap * 194, "K"),
                    new Beat(startTime + gap * 196, "Space"),
                    new Beat(startTime + gap * 198, "S"),
                    new Beat(startTime + gap * 200, "D"),
                    new Beat(startTime + gap * 202, "F"),

                    new Beat(startTime + gap * 204, "D"),
                    new Beat(startTime + gap * 206, "S"),
                    new Beat(startTime + gap * 208, "K"),
                    new Beat(startTime + gap * 210, "L"),
                    new Beat(startTime + gap * 212, "J"),
                    new Beat(startTime + gap * 214, "K"),
                    new Beat(startTime + gap * 216, "J"),
                    new Beat(startTime + gap * 218, "K"),
                    new Beat(startTime + gap * 220, "L"),
                    new Beat(startTime + gap * 222, "Space"),
                    new Beat(startTime + gap * 224, "D"),
                    new Beat(startTime + gap * 226, "S"),
                    new Beat(startTime + gap * 228, "D"),
                    new Beat(startTime + gap * 230, "S"),
                    new Beat(startTime + gap * 232, "D"),
                    new Beat(startTime + gap * 234, "S"),

                    new Beat(startTime + gap * 236, "K"),
                    new Beat(startTime + gap * 238, "L"),
                    new Beat(startTime + gap * 240, "J"),
                    new Beat(startTime + gap * 242, "K"),
                    new Beat(startTime + gap * 244, "J"),
                    new Beat(startTime + gap * 246, "K"),
                    new Beat(startTime + gap * 248, "L"),
                    new Beat(startTime + gap * 250, "Space"),
                    new Beat(startTime + gap * 252, "S"),
                    new Beat(startTime + gap * 254, "D"),
                    new Beat(startTime + gap * 256, "S"),
                    new Beat(startTime + gap * 258, "J"),
                    new Beat(startTime + gap * 260, "K"),
                    new Beat(startTime + gap * 262, "J"),
                    new Beat(startTime + gap * 264, "Space"),

                    new Beat(startTime + gap * 266, "S"),
                    new Beat(startTime + gap * 268, "D"),
                    new Beat(startTime + gap * 270, "S"),
                    new Beat(startTime + gap * 272, "D"),
                    new Beat(startTime + gap * 274, "S"),
                    new Beat(startTime + gap * 276, "D"),
                    new Beat(startTime + gap * 278 - 80, "S"),
                    new Beat(startTime + gap * 280 - 130, "D"),
                    new Beat(startTime + gap * 281, "F"),
                    new Beat(startTime + gap * 284, "J"),
                    new Beat(startTime + gap * 286 - 80, "K"),
                    new Beat(startTime + gap * 288 - 130, "L"),
                    new Beat(startTime + gap * 289, "J"),
                    new Beat(startTime + gap * 290, "K"),
                    new Beat(startTime + gap * 291, "J"),
                    new Beat(startTime + gap * 292, "K"),
                    new Beat(startTime + gap * 293, "L"),
                    new Beat(startTime + gap * 294, "Space"),

                };
        }
        else if (titleName.equals("Future Funk - Joakim Karud") && difficulty.equals("Hard")){
            int startTime = 2750 - Main.reach_time * 1000;  //设置起始时间
            int gap = 150;     //用来制定节拍的间隔
            beats = new Beat[]{
                    //节拍学习过程
                    new Beat(startTime, "S"),
                    new Beat(startTime, "J"),
                    new Beat(startTime + gap * 2, "D"),
                    new Beat(startTime + gap * 2, "K"),
                    new Beat(startTime + gap * 4, "S"),
                    new Beat(startTime + gap * 4, "J"),
                    new Beat(startTime + gap * 6, "D"),
                    new Beat(startTime + gap * 6, "K"),
                    new Beat(startTime + gap * 8, "S"),
                    new Beat(startTime + gap * 8, "J"),
                    new Beat(startTime + gap * 10, "D"),
                    new Beat(startTime + gap * 10, "K"),
                    new Beat(startTime + gap * 12 - 80, "S"),
                    new Beat(startTime + gap * 12 - 80, "J"),

                    new Beat(startTime + gap * 14 - 130, "D"),
                    new Beat(startTime + gap * 14 - 130, "K"),
                    new Beat(startTime + gap * 15, "F"),
                    new Beat(startTime + gap * 15, "L"),
                    new Beat(startTime + gap * 18, "J"),
                    new Beat(startTime + gap * 18, "S"),
                    new Beat(startTime + gap * 20 - 80, "K"),
                    new Beat(startTime + gap * 20 - 80, "D"),
                    new Beat(startTime + gap * 22 - 130, "L"),
                    new Beat(startTime + gap * 22 - 130, "F"),
                    new Beat(startTime + gap * 23, "J"),
                    new Beat(startTime + gap * 23, "F"),
                    new Beat(startTime + gap * 24, "K"),
                    new Beat(startTime + gap * 24, "D"),
                    new Beat(startTime + gap * 25, "J"),
                    new Beat(startTime + gap * 25, "F"),
                    new Beat(startTime + gap * 26, "K"),
                    new Beat(startTime + gap * 26, "D"),
                    new Beat(startTime + gap * 27, "L"),
                    new Beat(startTime + gap * 27, "L"),
                    new Beat(startTime + gap * 28, "Space"),

                    new Beat(startTime + gap * 36, "D"),
                    new Beat(startTime + gap * 38, "S"),
                    new Beat(startTime + gap * 40, "D"),
                    new Beat(startTime + gap * 42, "S"),
                    new Beat(startTime + gap * 44, "D"),
                    new Beat(startTime + gap * 46, "S"),
                    new Beat(startTime + gap * 48, "D"),
                    new Beat(startTime + gap * 50, "F"),
                    new Beat(startTime + gap * 52, "J"),
                    new Beat(startTime + gap * 54, "K"),
                    new Beat(startTime + gap * 56, "L"),
                    new Beat(startTime + gap * 58, "J"),
                    new Beat(startTime + gap * 60, "K"),
                    new Beat(startTime + gap * 62, "J"),
                    new Beat(startTime + gap * 64, "K"),
                    new Beat(startTime + gap * 66, "L"),
                    new Beat(startTime + gap * 68, "Space"),

                    new Beat(startTime + gap * 88, "S"),
                    new Beat(startTime + gap * 89, "D"),
                    new Beat(startTime + gap * 90, "S"),
                    new Beat(startTime + gap * 91, "D"),
                    new Beat(startTime + gap * 92, "J"),
                    new Beat(startTime + gap * 93, "K"),
                    new Beat(startTime + gap * 94, "J"),
                    new Beat(startTime + gap * 95, "K"),
                    new Beat(startTime + gap * 96, "D"),
                    new Beat(startTime + gap * 97, "F"),
                    new Beat(startTime + gap * 98, "L"),
                    new Beat(startTime + gap * 99, "Space"),
                    new Beat(startTime + gap * 100, "S"),
                    new Beat(startTime + gap * 101, "J"),
                    new Beat(startTime + gap * 102, "S"),
                    new Beat(startTime + gap * 103, "D"),
                    new Beat(startTime + gap * 104, "S"),
                    new Beat(startTime + gap * 105, "D"),
                    new Beat(startTime + gap * 106, "J"),
                    new Beat(startTime + gap * 107, "K"),
                    new Beat(startTime + gap * 108, "J"),
                    new Beat(startTime + gap * 109, "K"),
                    new Beat(startTime + gap * 110, "D"),
                    new Beat(startTime + gap * 111, "F"),
                    new Beat(startTime + gap * 112, "L"),
                    new Beat(startTime + gap * 114, "Space"),
                    new Beat(startTime + gap * 114, "F"),
                    new Beat(startTime + gap * 114, "J"),

                    new Beat(startTime + gap * 116, "K"),
                    new Beat(startTime + gap * 118, "L"),
                    new Beat(startTime + gap * 120, "J"),
                    new Beat(startTime + gap * 122, "K"),
                    new Beat(startTime + gap * 124, "J"),
                    new Beat(startTime + gap * 126, "K"),
                    new Beat(startTime + gap * 128, "L"),
                    new Beat(startTime + gap * 130, "Space"),
                    new Beat(startTime + gap * 132, "D"),
                    new Beat(startTime + gap * 132, "K"),
                    new Beat(startTime + gap * 134, "S"),
                    new Beat(startTime + gap * 134, "L"),
                    new Beat(startTime + gap * 136, "D"),
                    new Beat(startTime + gap * 136, "K"),
                    new Beat(startTime + gap * 138, "S"),
                    new Beat(startTime + gap * 138, "L"),
                    new Beat(startTime + gap * 140, "D"),
                    new Beat(startTime + gap * 140, "K"),
                    new Beat(startTime + gap * 142, "S"),
                    new Beat(startTime + gap * 142, "L"),
                    new Beat(startTime + gap * 144, "K"),
                    new Beat(startTime + gap * 144, "D"),
                    new Beat(startTime + gap * 146, "S"),
                    new Beat(startTime + gap * 146, "L"),
                    new Beat(startTime + gap * 148, "F"),
                    new Beat(startTime + gap * 148, "J"),
                    new Beat(startTime + gap * 150, "D"),
                    new Beat(startTime + gap * 150, "K"),
                    new Beat(startTime + gap * 152, "F"),
                    new Beat(startTime + gap * 152, "J"),
                    new Beat(startTime + gap * 154, "D"),
                    new Beat(startTime + gap * 154, "K"),
                    new Beat(startTime + gap * 156, "F"),
                    new Beat(startTime + gap * 156, "L"),
                    new Beat(startTime + gap * 158, "Space"),
                    new Beat(startTime + gap * 160, "S"),
                    new Beat(startTime + gap * 160, "L"),
                    new Beat(startTime + gap * 162, "D"),
                    new Beat(startTime + gap * 162, "K"),
                    new Beat(startTime + gap * 164, "F"),
                    new Beat(startTime + gap * 164, "J"),
                    new Beat(startTime + gap * 166, "J"),
                    new Beat(startTime + gap * 166, "F"),
                    new Beat(startTime + gap * 168, "K"),
                    new Beat(startTime + gap * 168, "D"),
                    new Beat(startTime + gap * 170, "L"),
                    new Beat(startTime + gap * 170, "S"),

                    new Beat(startTime + gap * 172, "S"),
                    new Beat(startTime + gap * 174, "D"),
                    new Beat(startTime + gap * 176, "S"),
                    new Beat(startTime + gap * 178, "J"),
                    new Beat(startTime + gap * 180, "K"),
                    new Beat(startTime + gap * 182, "J"),
                    new Beat(startTime + gap * 184, "D"),
                    new Beat(startTime + gap * 186, "F"),
                    new Beat(startTime + gap * 188, "D"),
                    new Beat(startTime + gap * 190, "K"),
                    new Beat(startTime + gap * 192, "L"),
                    new Beat(startTime + gap * 194, "K"),
                    new Beat(startTime + gap * 196, "Space"),
                    new Beat(startTime + gap * 196, "D"),
                    new Beat(startTime + gap * 196, "F"),
                    new Beat(startTime + gap * 196, "J"),
                    new Beat(startTime + gap * 196, "K"),

                    new Beat(startTime + gap * 198, "S"),
                    new Beat(startTime + gap * 200, "D"),
                    new Beat(startTime + gap * 202, "F"),
                    new Beat(startTime + gap * 204, "D"),
                    new Beat(startTime + gap * 206, "S"),
                    new Beat(startTime + gap * 208, "K"),
                    new Beat(startTime + gap * 210, "L"),
                    new Beat(startTime + gap * 212, "J"),
                    new Beat(startTime + gap * 214, "K"),
                    new Beat(startTime + gap * 216, "J"),
                    new Beat(startTime + gap * 218, "K"),
                    new Beat(startTime + gap * 220, "L"),
                    new Beat(startTime + gap * 222, "Space"),
                    new Beat(startTime + gap * 224, "D"),
                    new Beat(startTime + gap * 224, "K"),
                    new Beat(startTime + gap * 226, "S"),
                    new Beat(startTime + gap * 226, "L"),
                    new Beat(startTime + gap * 228, "D"),
                    new Beat(startTime + gap * 228, "K"),
                    new Beat(startTime + gap * 230, "S"),
                    new Beat(startTime + gap * 230, "L"),
                    new Beat(startTime + gap * 232, "D"),
                    new Beat(startTime + gap * 232, "K"),
                    new Beat(startTime + gap * 234, "S"),
                    new Beat(startTime + gap * 234, "L"),
                    new Beat(startTime + gap * 236, "K"),
                    new Beat(startTime + gap * 236, "D"),
                    new Beat(startTime + gap * 238, "L"),
                    new Beat(startTime + gap * 238, "S"),
                    new Beat(startTime + gap * 240, "J"),
                    new Beat(startTime + gap * 240, "F"),
                    new Beat(startTime + gap * 242, "K"),
                    new Beat(startTime + gap * 242, "D"),
                    new Beat(startTime + gap * 244, "J"),
                    new Beat(startTime + gap * 244, "F"),
                    new Beat(startTime + gap * 246, "K"),
                    new Beat(startTime + gap * 246, "D"),
                    new Beat(startTime + gap * 248, "L"),
                    new Beat(startTime + gap * 248, "F"),
                    new Beat(startTime + gap * 250, "Space"),
                    new Beat(startTime + gap * 252, "S"),
                    new Beat(startTime + gap * 254, "D"),
                    new Beat(startTime + gap * 256, "S"),
                    new Beat(startTime + gap * 258, "J"),
                    new Beat(startTime + gap * 260, "K"),
                    new Beat(startTime + gap * 262, "J"),
                    new Beat(startTime + gap * 264, "Space"),

                    new Beat(startTime + gap * 266, "S"),
                    new Beat(startTime + gap * 268, "D"),
                    new Beat(startTime + gap * 270, "S"),
                    new Beat(startTime + gap * 272, "D"),
                    new Beat(startTime + gap * 274, "S"),
                    new Beat(startTime + gap * 276, "D"),
                    new Beat(startTime + gap * 278 - 80, "S"),
                    new Beat(startTime + gap * 280 - 130, "D"),
                    new Beat(startTime + gap * 281, "F"),
                    new Beat(startTime + gap * 284, "J"),
                    new Beat(startTime + gap * 286 - 80, "K"),
                    new Beat(startTime + gap * 288 - 130, "L"),
                    new Beat(startTime + gap * 289, "J"),
                    new Beat(startTime + gap * 290, "K"),
                    new Beat(startTime + gap * 291, "J"),
                    new Beat(startTime + gap * 292, "K"),
                    new Beat(startTime + gap * 293, "L"),
                    new Beat(startTime + gap * 294, "Space"),

            };
        }
        gameMusic.start();

        int i = 0;
        while (i < beats.length && !isInterrupted()){
            boolean dropped = false;
            if (beats[i].getTime() <= gameMusic.getTime()){
                Note note = new Note(beats[i].getNoteName());
                note.start();
                noteList.add(note);
                i++;
                dropped = true;
            }
            if (!dropped ){
                try {
                    Thread.sleep(5);
                } catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
    //判定方块函数
    public void  judge(String input){
        for (int i = 0; i < noteList.size(); i++) {
               Note note = noteList.get(i);
               if (input.equals(note.getNoteType())){
                   judgeEvent(note.judge());
                   break;
               }
        }
    }
    //判断事件,判断显示等级
    public void judgeEvent(String judge){
        if (!judge.equals("None")){
            blueFlareImage = new ImageIcon(Main.class.getResource("../images/blueFlare.png")).getImage();
        }
        if(judge.equals("Miss")){
            judgeImage = new ImageIcon(Main.class.getResource("../images/judgeMiss.png")).getImage();
        }
        else if(judge.equals("Late")){
            judgeImage = new ImageIcon(Main.class.getResource("../images/judgeLate.png")).getImage();
        }
        else if(judge.equals("Early")){
            judgeImage = new ImageIcon(Main.class.getResource("../images/judgeEarly.png")).getImage();
        }
        else if(judge.equals("Good")){
            judgeImage = new ImageIcon(Main.class.getResource("../images/judgeGood.png")).getImage();
        }
        else if(judge.equals("Prefect")){
            judgeImage = new ImageIcon(Main.class.getResource("../images/judgePrefect.png")).getImage();
        }
    }

}


3.4 KeyListener_.java

package Mstw;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;


public class KeyListener_ extends KeyAdapter {

    //按下键盘
    @Override
    public void keyPressed(KeyEvent e){
        if (Mstw.game == null){
            return;
        }
        else if (e.getKeyCode() == KeyEvent.VK_S){
            Mstw.game.pressS();
        }
        else if (e.getKeyCode() == KeyEvent.VK_D){
            Mstw.game.pressD();
        }
        else if (e.getKeyCode() == KeyEvent.VK_F){
            Mstw.game.pressF();
        }
        else if (e.getKeyCode() == KeyEvent.VK_SPACE){
            Mstw.game.pressSpace();
        }
        else if (e.getKeyCode() == KeyEvent.VK_J){
            Mstw.game.pressJ();
        }
        else if (e.getKeyCode() == KeyEvent.VK_K){
            Mstw.game.pressK();
        }
        else if (e.getKeyCode() == KeyEvent.VK_L){
            Mstw.game.pressL();
        }
    }

    //释放键盘
    @Override
    public void keyReleased(KeyEvent e){
        if (Mstw.game == null){
            return;
        }
        else if (e.getKeyCode() == KeyEvent.VK_S){
            Mstw.game.releaseS();
        }
        else if (e.getKeyCode() == KeyEvent.VK_D){
            Mstw.game.releaseD();
        }
        else if (e.getKeyCode() == KeyEvent.VK_F){
            Mstw.game.releaseF();
        }
        else if (e.getKeyCode() == KeyEvent.VK_SPACE){
            Mstw.game.releaseSpace();
        }
        else if (e.getKeyCode() == KeyEvent.VK_J){
            Mstw.game.releaseJ();
        }
        else if (e.getKeyCode() == KeyEvent.VK_K){
            Mstw.game.releaseK();
        }
        else if (e.getKeyCode() == KeyEvent.VK_L){
            Mstw.game.releaseL();
        }
    }

}


3.5 Mstw.java

package Mstw;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;


public class Mstw extends JFrame {

    private Image screenImage;
    private Graphics screenGraphic;
    private int mouseX,mouseY;
    private boolean isGameScreen = false;

    //从路径中获取图片
    //背景图片
    private Image Background = new ImageIcon(Main.class.getResource("../images/background.jpg")).getImage();
    //上边界
    private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png")));

    //制作按钮基础图标和鼠标访问图标
    private ImageIcon exitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/exitButtonBasic.png"));
    private ImageIcon exitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/exitButtonEntered.png"));
    private ImageIcon startButtonBasicImage = new ImageIcon(Main.class.getResource("../images/startButtonBasic.png"));
    private ImageIcon startButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/startButtonEntered.png"));
    private ImageIcon quitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/quitButtonBasic.png"));
    private ImageIcon quitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/quitButtonEntered.png"));
    private ImageIcon easyButtonBasicImage = new ImageIcon(Main.class.getResource("../images/easyButtonBasic.png"));
    private ImageIcon easyButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/easyButtonEntered.png"));
    private ImageIcon hardButtonBasicImage = new ImageIcon((Main.class.getResource("../images/hardButtonBasic.png")));
    private ImageIcon hardButtonEnteredImage = new ImageIcon((Main.class.getResource("../images/hardButtonEntered.png")));
    private ImageIcon backButtonBasicImage = new ImageIcon(Main.class.getResource("../images/backButtonBasic.png"));
    private ImageIcon backButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/backButtonEntered.png"));
    private ImageIcon leftSelectedButtonBasicImage = new ImageIcon(Main.class.getResource("../images/leftSelectedButtonBasic.png"));
    private ImageIcon leftSelectedButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/leftSelectedButtonEntered.png"));
    private ImageIcon rightSelectedButtonBasicImage = new ImageIcon(Main.class.getResource("../images/rightSelectedButtonBasic.png"));
    private ImageIcon rightSelectedButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/rightSelectedButtonEntered.png"));

    //设置按钮
    private JButton exitButton = new JButton(exitButtonBasicImage);
    private JButton startButton = new JButton(startButtonBasicImage);
    private JButton quitButton = new JButton(quitButtonBasicImage);
    private JButton easyButton = new JButton(easyButtonBasicImage);
    private JButton hardButton = new JButton(hardButtonBasicImage);
    private JButton backButton = new JButton(backButtonBasicImage);
    private JButton leftSelectedButton = new JButton(leftSelectedButtonBasicImage);
    private JButton rightSelectedButton = new JButton(rightSelectedButtonBasicImage);

    private boolean isMainScreen = false;

    //创建数组列表来保存可选择的不同歌曲
    ArrayList<Track> trackList = new ArrayList<Track>();
    //音乐对应标题图片
    private Image titleImage;
    //选择不同音乐开始的不同封面
    private Image selectedImage;
    //所选择的bgm
    private Music selectedMusic;
    private int nowSelected = 0;
    //定义Music变量introMusic,传入首界面bgm
    Music introMusic = new Music("bgm.mp3",true);

    public static Game game;

    //构造方法
    public Mstw(){
        //将不同歌曲的属性加入到音乐列表中,并且便于组织
        trackList.add(new Track("Celebrate TitleImage.png", "Celebrate startImage.png", "gameBackground.jpg","Celebrate1.mp3", "Celebrate1.mp3", "Celebrate - Joakim Karud"));
        trackList.add(new Track("Future Funk TitleImage.png", "Future Funk startImage.png", "gameBackground.jpg","Future Funk1.mp3", "Future Funk1.mp3", "Future Funk - Joakim Karud"));

        //设置GUI界面
        setFocusable(true);                                 //设置屏幕焦点,以便于监听键盘
        setUndecorated(true);
        setTitle("Melodic sound travels the world");        //设置界面标题
        setSize(Main.screen_width,Main.screen_height);      //设置界面大小
        setResizable(true);                                 //设置窗口可以由用户自由调节大小
        setLocationRelativeTo(null);                        //设置窗口相对于指定组件的位置,null为屏幕中央
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     //设置界面执行程序可关闭
        setVisible(true);                                   //设置界面可见
        setBackground(new Color(0, 0, 0, 0));   //设置背景颜色
        setLayout(null);                                    //设置布局为空


        //执行线程,播放音乐
        introMusic.start();


        
        //设置右上角退出按钮
        quitButton.setBounds(1850, 0, 30, 30);  //设置按钮位置
        quitButton.setBorderPainted(false);
        quitButton.setContentAreaFilled(false);
        quitButton.setFocusPainted(false);
        quitButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseExited(MouseEvent e){
                quitButton.setIcon(quitButtonBasicImage);
                quitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            //鼠标访问
            @Override
            public void mouseEntered(MouseEvent e){
                quitButton.setIcon(quitButtonEnteredImage);
                quitButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
                Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
                buttonEnteredMusic.start();
            }
            //鼠标点击
            @Override
            public void mousePressed(MouseEvent e){
                Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
                buttonEnteredMusic.start();
                try {
                    Thread.sleep(1000);
                }
                catch (InterruptedException ex){
                    ex.printStackTrace();
                }
                System.exit(0);
            }
        });
        add(quitButton);

        //设置上边界,并且可以移动它
        menuBar.setBounds(0, 0, 1920, 30);
        menuBar.addMouseListener(new MouseAdapter(){
            @Override
            public void mousePressed(MouseEvent e){
                mouseX = e.getX();
                mouseY = e.getY();
            }
        });
        menuBar.addMouseMotionListener(new MouseMotionAdapter(){
            @Override
            public void mouseDragged(MouseEvent e){
                int x = e.getXOnScreen();
                int y = e.getYOnScreen();
                setLocation(x - mouseX, y - mouseY);
            }
        });
        add(menuBar);

        //设置离开EXIT按钮
        exitButton.setBounds(1100, 780, 169, 99);
        exitButton.setBorderPainted(false);
        exitButton.setContentAreaFilled(false);
        exitButton.setFocusPainted(false);
        exitButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseExited(MouseEvent e){
                exitButton.setIcon(exitButtonBasicImage);
                exitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            //鼠标访问
            @Override
            public void mouseEntered(MouseEvent e){
                exitButton.setIcon(exitButtonEnteredImage);
                exitButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
                Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
                buttonEnteredMusic.start();
            }
            //鼠标点击
            @Override
            public void mousePressed(MouseEvent e){
                Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
                buttonEnteredMusic.start();
                //设置按钮反应时间
                try {
                    Thread.sleep(200);
                }
                catch (InterruptedException ex){
                    ex.printStackTrace();
                }
                System.exit(0);
            }
        });
        add(exitButton);

        //设置开始Start按钮
        startButton.setBounds(650, 780, 169, 99);
        startButton.setBorderPainted(false);
        startButton.setContentAreaFilled(false);
        startButton.setFocusPainted(false);
        startButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseExited(MouseEvent e){
                startButton.setIcon(startButtonBasicImage);
                startButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            //鼠标访问
            @Override
            public void mouseEntered(MouseEvent e){
                startButton.setIcon(startButtonEnteredImage);
                startButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
                Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
                buttonEnteredMusic.start();
            }
            //鼠标点击
            @Override
            public void mousePressed(MouseEvent e){
                Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
                buttonEnteredMusic.start();
                //设置按钮反应时间
                try {
                    Thread.sleep(500);
                }
                catch (InterruptedException ex){
                    ex.printStackTrace();
                }
                //调用相应函数
                enterMain();
           }
        });
        add(startButton);

        //设置左选择按钮
        leftSelectedButton.setVisible(false);
        leftSelectedButton.setBounds(350, 450, 100, 100);
        leftSelectedButton.setBorderPainted(false);
        leftSelectedButton.setContentAreaFilled(false);
        leftSelectedButton.setFocusPainted(false);
        leftSelectedButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseExited(MouseEvent e){
                leftSelectedButton.setIcon(leftSelectedButtonBasicImage);
                leftSelectedButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            //鼠标访问
            @Override
            public void mouseEntered(MouseEvent e){
                leftSelectedButton.setIcon(leftSelectedButtonEnteredImage);
                leftSelectedButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
                Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
                buttonEnteredMusic.start();
            }
            //鼠标点击
            @Override
            public void mousePressed(MouseEvent e){
                Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
                buttonEnteredMusic.start();
                try {
                    Thread.sleep(200);
                }
                catch (InterruptedException ex){
                    ex.printStackTrace();
                }
                selectLift();   //按左选按钮调用selectLift函数
            }
        });
        add(leftSelectedButton);

        //设置右选择按钮
        rightSelectedButton.setVisible(false);
        rightSelectedButton.setBounds(1470, 450, 100, 100);
        rightSelectedButton.setBorderPainted(false);
        rightSelectedButton.setContentAreaFilled(false);
        rightSelectedButton.setFocusPainted(false);
        rightSelectedButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseExited(MouseEvent e){
                rightSelectedButton.setIcon(rightSelectedButtonBasicImage);
                rightSelectedButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            //鼠标访问
            @Override
            public void mouseEntered(MouseEvent e){
                rightSelectedButton.setIcon(rightSelectedButtonEnteredImage);
                rightSelectedButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
                Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
                buttonEnteredMusic.start();
            }
            //鼠标点击
            @Override
            public void mousePressed(MouseEvent e){
                Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
                buttonEnteredMusic.start();
                try {
                    Thread.sleep(200);
                }
                catch (InterruptedException ex){
                    ex.printStackTrace();
                }
                selectRight();  //按右选按钮调用selectRight函数
            }
        });
        add(rightSelectedButton);

        //设置简单按钮
        easyButton.setVisible(false);
        easyButton.setBounds(550, 800, 300, 150);  //设置按钮位置
        easyButton.setBorderPainted(false);
        easyButton.setContentAreaFilled(false);
        easyButton.setFocusPainted(false);
        easyButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseExited(MouseEvent e){
                easyButton.setIcon(easyButtonBasicImage);
                easyButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            //鼠标访问
            @Override
            public void mouseEntered(MouseEvent e){
                easyButton.setIcon(easyButtonEnteredImage);
                easyButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
                Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
                buttonEnteredMusic.start();
            }
            //鼠标点击
            @Override
            public void mousePressed(MouseEvent e){
                Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
                buttonEnteredMusic.start();
                Main.scout = 0;
                try {
                    Thread.sleep(200);
                }
                catch (InterruptedException ex){
                    ex.printStackTrace();
                }
                //开始游戏,难度为Easy
                gameStart(nowSelected,"Easy");
            }
        });
        add(easyButton);

        //设置困难按钮
        hardButton.setVisible(false);
        hardButton.setBounds(1070, 800, 300, 150);  //设置按钮位置
        hardButton.setBorderPainted(false);
        hardButton.setContentAreaFilled(false);
        hardButton.setFocusPainted(false);
        hardButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseExited(MouseEvent e){
                hardButton.setIcon(hardButtonBasicImage);
                hardButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            //鼠标访问
            @Override
            public void mouseEntered(MouseEvent e){
                hardButton.setIcon(hardButtonEnteredImage);
                hardButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
                Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
                buttonEnteredMusic.start();
            }
            //鼠标点击
            @Override
            public void mousePressed(MouseEvent e){
                Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
                buttonEnteredMusic.start();
                Main.scout = 0;
                try {
                    Thread.sleep(200);
                }
                catch (InterruptedException ex){
                    ex.printStackTrace();
                }
                //开始游戏,难度为Hard
                gameStart(nowSelected,"Hard");
            }
        });
        add(hardButton);

        //设置返回按钮
        backButton.setBounds(20, 50, 100, 100);
        backButton.setVisible(false);
        backButton.setBorderPainted(false);
        backButton.setContentAreaFilled(false);
        backButton.setFocusPainted(false);
        backButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseExited(MouseEvent e){
                backButton.setIcon(backButtonBasicImage);
                backButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            //鼠标访问
            @Override
            public void mouseEntered(MouseEvent e){
                backButton.setIcon(backButtonEnteredImage);
                backButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
                Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
                buttonEnteredMusic.start();
            }
            //鼠标点击
            @Override
            public void mousePressed(MouseEvent e){
                Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
                buttonEnteredMusic.start();
                //设置按钮反应时间
                try {
                    Thread.sleep(200);
                }
                catch (InterruptedException ex){
                    ex.printStackTrace();
                }
                //返回上一个界面
                backMain(); //返回界面函数
            }
        });
        add(backButton);

    }

    //重写Graphics类的paint方法进行绘图
    public void paint(Graphics g){
        //创建一幅用于双缓冲,可以在屏幕外绘制的图像
        screenImage = createImage(Main.screen_width,Main.screen_height);
        //得到一个Graphics对象
        screenGraphic = screenImage.getGraphics();
        //调用screenDraw方法进行绘画
        screenDraw((Graphics2D) screenGraphic);
        //Graphics对象g调用drawImage方法,要加载的图像为screenImage,绘制图像矩阵左上角的位置为(0,0),容器为空
        g.drawImage(screenImage, 0, 0, null);
    }

    public void screenDraw(Graphics2D g) {

        //Graphics对象g调用drawImage方法,要加载的图像为introBackground,绘制图像矩阵左上角的位置为(0,0),容器为空
        g.drawImage(Background,0,0,null);
        //如果是游戏选择界面的话就绘制图片和标题
        if (isMainScreen){
            g.drawImage(selectedImage, 710, 250, null);
            g.drawImage(titleImage, 710, 150, null);
        }
        //如果进入到游戏屏幕,才能实现游戏功能
        if (isGameScreen){
            game.screenDraw(g);
        }
        paintComponents(g);
        try{
            Thread.sleep(5);
        } catch (Exception e){
            e.printStackTrace();
        }
        //重绘图像
        this.repaint();

    }
    //根据当前所选择的音乐变换bgm和图片
    public void selectTrack(int nowSelected){
        if (selectedMusic != null){
            selectedMusic.close();
        }
        titleImage = new ImageIcon(Main.class.getResource("../images/"+trackList.get(nowSelected).getTitleImage())).getImage();
        selectedImage = new ImageIcon(Main.class.getResource("../images/"+trackList.get(nowSelected).getStartImage())).getImage();
        selectedMusic = new Music(trackList.get(nowSelected).getStartMusic(), true);
        selectedMusic.start();
    }

    //向左选择的函数
    public void selectLift(){
        //如果是第一首再按左就跳到最后一首
        if (nowSelected == 0){
            nowSelected = trackList.size() - 1;
        }
        else {
            nowSelected --;
        }
        selectTrack(nowSelected);   //调用方法实现歌曲和图片的切换
    }
    //向右选择的函数
    public void selectRight(){
        //如果是最后一首再按左就跳到第一首
        if (nowSelected == trackList.size() - 1){
            nowSelected = 0;
        }
        else {
            nowSelected ++;
        }
        selectTrack(nowSelected);   //调用方法实现歌曲和图片的切换
    }

    //开始游戏执行的函数,参数为选择的难度
    public void gameStart(int nowSelected,String difficulty){
        if (selectedMusic != null){
            selectedMusic.close();
        }
        easyButton.setVisible(false);
        hardButton.setVisible(false);
        backButton.setVisible(true);
        leftSelectedButton.setVisible(false);
        rightSelectedButton.setVisible(false);
        Background = new ImageIcon(Main.class.getResource("../images/gameBackground.jpg")).getImage();
        isGameScreen = true;
        isMainScreen = false;
        //接收键盘事件
        addKeyListener(new KeyListener_());
        //对于不同歌曲传入不同参数
        game = new Game(trackList.get(nowSelected).getTitleName(), difficulty, trackList.get(nowSelected).getGameMusic());
        game.start();
        //始终捕捉键盘焦点
        setFocusable(true);
    }

    //点击返回按钮返回上一个界面的函数
    public void backMain(){
        easyButton.setVisible(true);
        hardButton.setVisible(true);
        backButton.setVisible(false);
        leftSelectedButton.setVisible(true);
        rightSelectedButton.setVisible(true);
        Background = new ImageIcon(Main.class.getResource("../images/introBackground.jpg")).getImage();
        isMainScreen = true;    //返回的第二个界面是游戏选择界面
        selectTrack(nowSelected);
        //第二个界面不是正式游戏界面
        isGameScreen = false;
        //关闭游戏中的音乐
        game.close();
    }

    public void enterMain(){
        //点击开始按钮后隐藏start和exit按钮
        startButton.setVisible(false);
        exitButton.setVisible(false);
        //点击开始按钮后显示easy和hard按钮和左右选择按钮
        easyButton.setVisible(true);
        hardButton.setVisible(true);
        leftSelectedButton.setVisible(true);
        rightSelectedButton.setVisible(true);
        Background = new ImageIcon(Main.class.getResource("../images/introBackground.jpg")).getImage();
        //进入到游戏主界面(选择界面)
        isMainScreen = true;
        //点击开始按钮关闭第一个页面的bgm
        introMusic.close();
        //默认点击开始首先进入第一首歌
        selectTrack(0);
    }

}


3.6 Music.java

package Mstw;
import javazoom.jl.player.Player;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;

public class Music extends Thread{

    private Player player;
    private boolean isLoop;
    private File file;
    private FileInputStream fis;
    private BufferedInputStream bis;

    //重载构造函数,传入参数为名字和是否循环
    public Music(String name, boolean isLoop){
        try {
            this.isLoop = isLoop;

            //创建一个File对象
            file = new File(Main.class.getResource("../music/"+name).toURI());
            //创建一个输入流
            fis = new FileInputStream(file);
            //创建一个缓冲流
            bis = new BufferedInputStream(fis);
            //创建播放器对象,将文件的缓冲输入流传入进去
            player = new Player(bis);

        }
        catch(Exception e){
            e.printStackTrace();
        }
    }

    public int getTime(){
        if (player == null)
            return 0;
        return player.getPosition();
    }

    public void close(){
        isLoop = false;
        player.close();
        this.interrupt();
    }

    @Override
    public void run() {
        try {
            do{
                player.play();                      //用播放方法进行播放

                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                player = new Player(bis);
            }while(isLoop);                         //循环播放,直到有终止条件isLoop = false
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}


3.7 Note.java

package Mstw;

import javax.swing.*;
import java.awt.*;

public class Note extends Thread{
    private Image noteBasicImage = new ImageIcon(Main.class.getResource("../images/noteBasic.png")).getImage();
    private int x, y = 600 - (1000 / Main.sleep_time * Main.note_speed) * Main.reach_time;
    private String noteType;
    private boolean proceeded = true;

    public boolean isProceeded() {
        return proceeded;
    }

    public String getNoteType(){
        return noteType;
    }

    public void close() {
        proceeded = false;
    }

    public Note(String noteType){
        if(noteType.equals("S")){
            x = 424;
        }
        if(noteType.equals("D")){
            x = 578;
        }
        if(noteType.equals("F")){
            x = 732;
        }
        if(noteType.equals("Space")){
            x = 886;
        }
        if(noteType.equals("J")){
            x = 1040;
        }
        if(noteType.equals("K")){
            x = 1194;
        }
        if(noteType.equals("L")){
            x = 1348;
        }
        this.noteType = noteType;
    }

    public void screenDraw(Graphics2D g){
        g.drawImage(noteBasicImage, x, y, null);
    }
    //方块下落函数
    public void drop(){
        y += Main.note_speed;   //以一个速度下落
        //方块超出判定区就消失,并且算Miss
        if (y > 965){
            System.out.println("Miss");
            close();
        }
    }

    @Override
    public void run(){
        try{
            while (true){
                drop();
                if (proceeded){
                    Thread.sleep(Main.sleep_time);
                }
                else {
                    interrupt();
                    break;
                }
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    public String judge(){
        if (y > 935){
            System.out.println("Late");
            Main.scout += 10;
            close();
            return "Late";
        }
        else if (y > 915){
            System.out.println("Good");
            Main.scout += 20;
            close();
            return "Good";
        }
        else if (y > 895){
            System.out.println("Prefect");
            Main.scout += 40;
            close();
            return "Prefect";
        }
        else if (y > 875){
            System.out.println("Early");
            Main.scout += 10;
            close();
            return "Early";
        }
        return "None";
    }

    public int getY(){
        return y;
    }

}


3.8 Track.java

package Mstw;

public class Track {

    private String titleImage;
    private String startImage;
    private String gameImage;
    private String startMusic;
    private String gameMusic;
    private String titleName;

    public String getTitleImage(){
        return titleImage;
    }
    public void setTitleImage(String titleImage){
        this.titleImage = titleImage;
    }

    public String getStartImage() {
        return startImage;
    }
    public void setStartImage(String startImage){
        this.startImage = startImage;
    }
    public String getGameImage(){
        return gameImage;
    }
    public void setGameImage(String gameImage){
        this.gameImage = gameImage;
    }
    public String getStartMusic(){
        return startMusic;
    }
    public void setStartMusic(String startMusic){
        this.startMusic = startMusic;
    }
    public String getGameMusic(){
        return gameMusic;
    }
    public void setGameMusic(String gameMusic){
        this.gameMusic = gameMusic;
    }
    public String getTitleName(){
        return titleName;
    }
    public void setTitleName(String titleName){
        this.titleName = titleName;
    }

    public Track(String titleImage, String startImage, String gameImage, String startMusic, String gameMusic, String titleName){
        this.titleImage = titleImage;
        this.startImage = startImage;
        this.gameImage = gameImage;
        this.startMusic = startMusic;
        this.gameMusic = gameMusic;
        this.titleName = titleName;
    }


}

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java旅游管理系统项目是一个基于Java语言开发的一款用于管理旅游行业相关信息的软件系统。通过该系统,可以实现对旅游产品、订单、客户信息等的管理和查询,方便旅游机构进行销售、跟踪和统计,提高工作效率和服务质量。 该系统主要包括以下功能模块: 1. 旅游产品管理:管理员工可以对旅游产品进行添加、修改和删除操作,包括产品名称、价格、行程、景点介绍等信息的录入和维护。 2. 订单管理:客户可以通过系统查询旅游产品信息,并进行订单的提交和支付。管理员工可以对订单进行确认、取消和修改操作,根据订单状态实现进度跟踪和查看订单详情。 3. 客户管理:管理员工可以管理客户的基本信息,包括联系方式、购买历史记录等,便于客户推荐和沟通。 4. 报表统计:系统能够生成旅游产品销售报表和客户消费报表,通过统计数据帮助旅游机构了解产品销售情况和客户偏好,有针对性地进行市场推广和产品调整。 5. 权限控制:系统设置了不同级别的用户权限,保证只有授权人员才能进行敏感操作,并能根据工作职责划分权限范围,提高数据安全性。 6. 数据备份与恢复:系统支持数据定期备份和灾难恢复功能,保障数据的安全可靠性。 该项目的主要技术包括Java EE框架、MySQL数据库、Tomcat服务器等,通过经典的MVC架构模式进行开发,使得系统结构清晰,功能模块独立,易于维护和扩展。 Java旅游管理系统项目能有效提升旅游机构的业务流程、管理效率和客户满意度,是一个实用性较高的软件系统。希望我的回答能够对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值