基于Java的音游项目

发布于:2022-12-03 ⋅ 阅读:(12083) ⋅ 点赞:(12)

一、项目效果演示

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;
    }


}

本文含有隐藏内容,请 开通VIP 后查看