SlideShare a Scribd company logo
1 of 30
자바 텀 프로젝트 결과 보고서
6조
조원 : 20153030 정규빈
20153034 최철민
목차
1. 메인 화면
- 시작버튼
- 종료버튼
- 인트로 뮤직
2. 곡 선택
- 다음 곡 버튼
- 이전 곡 버튼
- 현재 선택하고 있는 곡 재생
- easy hard 버튼
3. 게임실행
- 박자에 맞춘 노트 떨구기
- 키 클릭 이벤트 처리
- y좌표에 따른 판정 처리
- 뒤로 가기 버튼
4. 코드설명
1. 메인 화면
검은색 전원 버튼은 시작하기로 마우스 클릭 시 곡 선택 화면으로 전환
된다.
빨간색 전원 버튼은 종료하기로 마우스 클릭 시 종료된다.
오른쪽 상단에 있는 x버튼 또한 종료버튼이다.
2. 곡 선택
파란색 다음 곡 버튼과 이전 버튼으로 곡을 변경할 수 있다.
easy hard 버튼으로 난이도를 선택하여 게임을 실행할 수
있다.
3. 게임실행
설정해둔 비트 순서로 노트가 시간의 변화에 따라 떨어진다.
노트의 y좌표가 실시간으로 변하고 노트가 판정선에 가까워
지면 키를 입력한다.
그 때 키패드의 y좌표와 노트의 y좌표를 비교해서 판정 그
에 맞는 판정 결과가 정중앙에 나타난다.
마지막으로 왼쪽 상단에 있는 되돌아가기 버튼을 클릭 시
곡 선택 화면으로 돌아간다.
4. 코드 설명
Main.java
package dynamic_beat_17;
public class Main {
public static final int SCREEN_WIDTH = 1280; //창의 가로 크기
public static final int SCREEN_HEIGHT = 720; //창의 세로 크기
public static final int NOTE_SPEED = 3;
public static final int SLEEP_TIME = 10;
public static final int REACH_TIME = 2;
public static void main(String[] args) {
new DynamicBeat();
}
}
DynamicBeat.java
package dynamic_beat_17;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class DynamicBeat extends JFrame {
private Image screenImage;
private Graphics screenGraphic;
//버튼이미지 삽입
private ImageIcon exitButtonEnteredImage = new
ImageIcon(Main.class.getResource("../images/exitButtonEntered.jpg"));
private ImageIcon exitButtonBasicImage = new
ImageIcon(Main.class.getResource("../images/exitButtonBasic2.jpg"));
private ImageIcon startButtonEnteredImage = new
ImageIcon(Main.class.getResource("../images/startEntered.png"));
private ImageIcon startButtonBasicImage = new
ImageIcon(Main.class.getResource("../images/startBasic.png"));
private ImageIcon quitButtonEnteredImage = new
ImageIcon(Main.class.getResource("../images/quitEntered.png"));
private ImageIcon quitButtonBasicImage = new
ImageIcon(Main.class.getResource("../images/quitBasic.png"));
private ImageIcon leftButtonEnteredImage = new
ImageIcon(Main.class.getResource("../images/leftButtonEntered.png"));
private ImageIcon leftButtonBasicImage = new
ImageIcon(Main.class.getResource("../images/leftButtonBasic.png"));
private ImageIcon rightButtonEnteredImage = new ImageIcon(
Main.class.getResource("../images/rightButtonEntered.png"));
private ImageIcon rightButtonBasicImage = new
ImageIcon(Main.class.getResource("../images/rightButtonBasic.png"));
private ImageIcon easyButtonEnteredImage = new
ImageIcon(Main.class.getResource("../images/easyButtonEntered.png"));
private ImageIcon easyButtonBasicImage = new
ImageIcon(Main.class.getResource("../images/easyButtonBasic.png"));
private ImageIcon hardButtonEnteredImage = new
ImageIcon(Main.class.getResource("../images/hardButtonEntered.png"));
private ImageIcon hardButtonBasicImage = new
ImageIcon(Main.class.getResource("../images/hardButtonBasic.png"));
private ImageIcon backButtonEnteredImage = new
ImageIcon(Main.class.getResource("../images/backButtonEntered.png"));
private ImageIcon backButtonBasicImage = new
ImageIcon(Main.class.getResource("../images/backButtonBasic.png"));
private Image background = new
ImageIcon(Main.class.getResource("../images/introbackground(title).jpg")).getImage
();
private JLabel menuBar = new JLabel(new
ImageIcon(Main.class.getResource("../images/menuBar.png")));
private JButton exitButton = new JButton(exitButtonBasicImage);
private JButton startButton = new JButton(startButtonBasicImage);
private JButton quitButton = new JButton(quitButtonBasicImage);
private JButton leftButton = new JButton(leftButtonBasicImage);
private JButton rightButton = new JButton(rightButtonBasicImage);
private JButton easyButton = new JButton(easyButtonBasicImage);
private JButton hardButton = new JButton(hardButtonBasicImage);
private JButton backButton = new JButton(backButtonBasicImage);
private int mouseX, mouseY;
private boolean isMainScreen = false;
private boolean isGameScreen = false;
ArrayList<Track> trackList = new ArrayList<Track>();
private Image titleImage;
private Image selectedImage;
private Music selectedMusic;
private Music introMusic = new Music("intromusic2.mp3", true);
private int nowSelected = 0;
public static Game game;
public DynamicBeat() {
trackList.add(new Track("Mighty Love Title Image.png", "Mighty Love
Start Image.jpg",
"Mighty Love Game Image.jpg", "Mighty Love - Joakim
Karud.mp3", "Mighty Love - Joakim Karud.mp3",
"Mighty Love - Joakim Karud"));
trackList.add(new Track("Wild Flower Title Image.png", "Wild Flower
Start Image.jpg",
"Wild Flower Game Image.jpg", "Joakim Karud - Wild
Flower.mp3", "Joakim Karud - Wild Flower.mp3",
"Joakim Karud - Wild Flower"));
trackList.add(new Track("Energy Title Image.png", "Energy Start
Image.jpg", "Energy Game Image.jpg",
"Energy-Bensound.mp3", "Energy-Bensound.mp3",
"Energy-Bensound"));
trackList.add(new Track("Boy Jump Title Image.png", "Boy Jump Start
Image.png", "Boy Jump Game Image.png",
"MommySon - Boy Jump.mp3", "MommySon - Boy
Jump.mp3", "MommySon - Boy Jump")); // 트랙 이미지 음악 추가
setUndecorated(true);
setTitle("Dynamic Beat");
setSize(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBackground(new Color(0, 0, 0, 0));
setLayout(null);
addKeyListener(new KeyListener());
introMusic.start();
exitButton.setBounds(1245, 0, 30, 30); //x버튼 위치 설정
exitButton.setBorderPainted(false);
exitButton.setContentAreaFilled(false);
exitButton.setFocusPainted(false);
exitButton.addMouseListener(new MouseAdapter() {
@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 mouseExited(MouseEvent e) {
exitButton.setIcon(exitButtonBasicImage);
exitButton.setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
@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(exitButton);
startButton.setBounds(40, 200, 200, 200);
startButton.setBorderPainted(false);
startButton.setContentAreaFilled(false);
startButton.setFocusPainted(false);
startButton.addMouseListener(new MouseAdapter() {
@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 mouseExited(MouseEvent e) {
startButton.setIcon(startButtonBasicImage);
startButton.setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
Music buttonEnteredMusic = new
Music("buttonPressedMusic.mp3", false);
buttonEnteredMusic.start();
enterMain();
}
});
add(startButton);
quitButton.setBounds(40, 330, 200, 200);
quitButton.setBorderPainted(false);
quitButton.setContentAreaFilled(false);
quitButton.setFocusPainted(false);
quitButton.addMouseListener(new MouseAdapter() {
@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 mouseExited(MouseEvent e) {
quitButton.setIcon(quitButtonBasicImage);
quitButton.setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
@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);
leftButton.setVisible(false);
leftButton.setBounds(140, 310, 60, 60);
leftButton.setBorderPainted(false);
leftButton.setContentAreaFilled(false);
leftButton.setFocusPainted(false);
leftButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
leftButton.setIcon(leftButtonEnteredImage);
leftButton.setCursor(new
Cursor(Cursor.HAND_CURSOR));
Music buttonEnteredMusic = new
Music("buttonEnteredMusic.mp3", false);
buttonEnteredMusic.start();
}
@Override
public void mouseExited(MouseEvent e) {
leftButton.setIcon(leftButtonBasicImage);
leftButton.setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
Music buttonEnteredMusic = new
Music("buttonPressedMusic.mp3", false);
buttonEnteredMusic.start();
selectLeft();
}
});
add(leftButton);
rightButton.setVisible(false);
rightButton.setBounds(1080, 310, 60, 60);
rightButton.setBorderPainted(false);
rightButton.setContentAreaFilled(false);
rightButton.setFocusPainted(false);
rightButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
rightButton.setIcon(rightButtonEnteredImage);
rightButton.setCursor(new
Cursor(Cursor.HAND_CURSOR));
Music buttonEnteredMusic = new
Music("buttonEnteredMusic.mp3", false);
buttonEnteredMusic.start();
}
@Override
public void mouseExited(MouseEvent e) {
rightButton.setIcon(rightButtonBasicImage);
rightButton.setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
Music buttonEnteredMusic = new
Music("buttonPressedMusic.mp3", false);
buttonEnteredMusic.start();
selectRight();
}
});
add(rightButton);
easyButton.setVisible(false);
easyButton.setBounds(375, 580, 200, 100);
easyButton.setBorderPainted(false);
easyButton.setContentAreaFilled(false);
easyButton.setFocusPainted(false);
easyButton.addMouseListener(new MouseAdapter() {
@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 mouseExited(MouseEvent e) {
easyButton.setIcon(easyButtonBasicImage);
easyButton.setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
Music buttonEnteredMusic = new
Music("buttonPressedMusic.mp3", false);
buttonEnteredMusic.start();
gameStart(nowSelected, "Easy");
}
});
add(easyButton);
hardButton.setVisible(false);
hardButton.setBounds(655, 580, 200, 100);
hardButton.setBorderPainted(false);
hardButton.setContentAreaFilled(false);
hardButton.setFocusPainted(false);
hardButton.addMouseListener(new MouseAdapter() {
@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 mouseExited(MouseEvent e) {
hardButton.setIcon(hardButtonBasicImage);
hardButton.setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
Music buttonEnteredMusic = new
Music("buttonPressedMusic.mp3", false);
buttonEnteredMusic.start();
gameStart(nowSelected, "Hard");
}
});
add(hardButton);
backButton.setVisible(false);
backButton.setBounds(20, 50, 60, 60);
backButton.setBorderPainted(false);
backButton.setContentAreaFilled(false);
backButton.setFocusPainted(false);
backButton.addMouseListener(new MouseAdapter() {
@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 mouseExited(MouseEvent e) {
backButton.setIcon(backButtonBasicImage);
backButton.setCursor(new
Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
Music buttonEnteredMusic = new
Music("buttonPressedMusic.mp3", false);
buttonEnteredMusic.start();
backMain();
}
});
add(backButton);
menuBar.setBounds(0, 0, 1280, 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);
}
public void paint(Graphics g) {
screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT);
screenGraphic = screenImage.getGraphics();
screenDraw((Graphics2D) screenGraphic);
g.drawImage(screenImage, 0, 0, null);
}
public void screenDraw(Graphics2D g) {
g.drawImage(background, 0, 0, null);
if (isMainScreen) {
g.drawImage(selectedImage, 340, 100, null); //곡선택 화면
g.drawImage(titleImage, 340, 70, null);
}
if (isGameScreen) {
game.screenDraw(g);
}
paintComponents(g);
try {
Thread.sleep(5);
} catch (Exception e) {
e.printStackTrace();
}
this.repaint();
}
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 selectLeft() {
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();
isMainScreen = false; //메인화면 끄기
leftButton.setVisible(false); //이전 버튼 안보이게 하기
rightButton.setVisible(false);
easyButton.setVisible(false);
hardButton.setVisible(false);
background = new ImageIcon(Main.class.getResource("../images/" +
trackList.get(nowSelected).getGameImage()))
.getImage();
backButton.setVisible(true);
isGameScreen = true;
game = new Game(trackList.get(nowSelected).getTitleName(),
difficulty,
trackList.get(nowSelected).getGameMusic());
game.start();
setFocusable(true);
}
public void backMain() {
isMainScreen = true;
leftButton.setVisible(true);
rightButton.setVisible(true);
easyButton.setVisible(true);
hardButton.setVisible(true);
background = new
ImageIcon(Main.class.getResource("../images/mainbackground.jpg")).getImage();
backButton.setVisible(false);
selectTrack(nowSelected);
isGameScreen = false;
game.close();
}
public void enterMain() {
startButton.setVisible(false);
quitButton.setVisible(false);
background = new
ImageIcon(Main.class.getResource("../images/mainbackground.jpg")).getImage();
isMainScreen = true;
leftButton.setVisible(true);
rightButton.setVisible(true);
easyButton.setVisible(true);
hardButton.setVisible(true);
introMusic.close();
selectTrack(0);
}
}
KeyListener.Java
package dynamic_beat_17;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class KeyListener extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
if(DynamicBeat.game ==null) { // 키 리스너 설정 입력시와
뗏을 때
return;
}
if (e.getKeyCode() == KeyEvent.VK_S) {
DynamicBeat.game.pressS();
} else if (e.getKeyCode() == KeyEvent.VK_D) {
DynamicBeat.game.pressD();
} else if (e.getKeyCode() == KeyEvent.VK_F) {
DynamicBeat.game.pressF();
} else if (e.getKeyCode() == KeyEvent.VK_SPACE) {
DynamicBeat.game.pressSpace();
} else if (e.getKeyCode() == KeyEvent.VK_J) {
DynamicBeat.game.pressJ();
} else if (e.getKeyCode() == KeyEvent.VK_K) {
DynamicBeat.game.pressK();
} else if (e.getKeyCode() == KeyEvent.VK_L) {
DynamicBeat.game.pressL();
}
}
@Override
public void keyReleased(KeyEvent e) {
if(DynamicBeat.game ==null) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_S) {
DynamicBeat.game.releaseS();
} else if (e.getKeyCode() == KeyEvent.VK_D) {
DynamicBeat.game.releaseD();
} else if (e.getKeyCode() == KeyEvent.VK_F) {
DynamicBeat.game.releaseF();
} else if (e.getKeyCode() == KeyEvent.VK_SPACE) {
DynamicBeat.game.releaseSpace();
} else if (e.getKeyCode() == KeyEvent.VK_J) {
DynamicBeat.game.releaseJ();
} else if (e.getKeyCode() == KeyEvent.VK_K) {
DynamicBeat.game.releaseK();
} else if (e.getKeyCode() == KeyEvent.VK_L) {
DynamicBeat.game.releaseL();
}
}
}
Track.java
package dynamic_beat_17;
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) {// Track 생성자
super();
this.titleImage = titleImage;
this.startImage = startImage;
this.gameImage = gameImage;
this.startMusic = startMusic;
this.gameMusic = gameMusic;
this.titleName = titleName;
}
}
Note.java
package dynamic_beat_17;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
public class Note extends Thread {
private Image noteBasicImage = new
ImageIcon(Main.class.getResource("../images/noteBasic.png")).getImage();
private int x, y = 580 - (1000 / Main.SLEEP_TIME * Main.NOTE_SPEED) *
Main.REACH_TIME; //노트의 떨어지는 속도 제어
private String noteType;
private boolean proceeded = true;
public String getNoteType() {
return noteType;
}
public boolean isProceeded() {
return proceeded;
}
public void close() {
proceeded = false;
}
public Note(String noteType) { //키패드 설정
if (noteType.equals("S")) {
x = 228;
} else if (noteType.equals("D")) {
x = 332;
} else if (noteType.equals("F")) {
x = 436;
} else if (noteType.equals("Space")) {
x = 540;
} else if (noteType.equals("J")) {
x = 744;
} else if (noteType.equals("K")) {
x = 848;
} else if (noteType.equals("L")) {
x = 952;
}
this.noteType = noteType;
}
public void screenDraw(Graphics2D g) {
if (!noteType.equals("Space")) {
g.drawImage(noteBasicImage, x, y, null);
} else {
g.drawImage(noteBasicImage, x, y, null);
g.drawImage(noteBasicImage, x + 100, y, null);
}
}
public void drop() {
y += Main.NOTE_SPEED;
if(y>620) {
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) {
System.err.println(e.getMessage());
}
}
public String judge() { //노트판정 조건
if(y>=613) {
System.out.println("Late");
close();
return "Late";
}
else if(y>=600) {
System.out.println("Good");
close();
return "Good";
}
else if(y>=587) {
System.out.println("Great");
close();
return "Great";
}
else if(y>=573) {
System.out.println("Perfect");
close();
return "Perfect";
}
else if(y>=565) {
System.out.println("Great");
close();
return "Great";
}
else if(y>=550) {
System.out.println("Good");
close();
return "Good";
}
else if(y>=535) {
System.out.println("Early");
close();
return "Early";
}
return "None";
}
public int getY() {
return y;
}
}
Game.java
package dynamic_beat_17;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.util.ArrayList;
import javax.swing.ImageIcon;
public class Game extends Thread {
private Image noteRouteLineImage = new
ImageIcon(Main.class.getResource("../images/noteRouteLine.png")).getImage();
private Image judgementLineImage = new
ImageIcon(Main.class.getResource("../images/judgementLine.png")).getImage();
private Image gameInfoImage = new
ImageIcon(Main.class.getResource("../images/gameInfo.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 noteRouteSpace1Image = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
private Image noteRouteSpace2Image = 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 Image keyPadSImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
private Image keyPadDImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
private Image keyPadFImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
private Image keyPadSpace1Image = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
private Image keyPadSpace2Image = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
private Image keyPadJImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
private Image keyPadKImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
private Image keyPadLImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
private String titleName;
private String difficulty;
private String musicTitle;
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(noteRouteSImage, 228, 30, null);
g.drawImage(noteRouteDImage, 332, 30, null);
g.drawImage(noteRouteFImage, 436, 30, null);
g.drawImage(noteRouteSpace1Image, 540, 30, null);
g.drawImage(noteRouteSpace2Image, 640, 30, null);
g.drawImage(noteRouteJImage, 744, 30, null);
g.drawImage(noteRouteKImage, 848, 30, null);
g.drawImage(noteRouteLImage, 952, 30, null);
g.drawImage(noteRouteLineImage, 224, 30, null);
g.drawImage(noteRouteLineImage, 328, 30, null);
g.drawImage(noteRouteLineImage, 432, 30, null);
g.drawImage(noteRouteLineImage, 536, 30, null);
g.drawImage(noteRouteLineImage, 740, 30, null);
g.drawImage(noteRouteLineImage, 844, 30, null);
g.drawImage(noteRouteLineImage, 948, 30, null);
g.drawImage(noteRouteLineImage, 1052, 30, null);
g.drawImage(gameInfoImage, 0, 660, null);
g.drawImage(judgementLineImage, 0, 580, null);
for (int i = 0; i < noteList.size(); i++) {
Note note = noteList.get(i);
if(note.getY() > 620) {
judgeImage = new
ImageIcon(Main.class.getResource("../images/Miss.png")).getImage();
}
if(!note.isProceeded()) {
noteList.remove(i);
i--;
}
else {
note.screenDraw(g);
}
note.screenDraw(g);
}
g.setColor(Color.WHITE);
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setColor(Color.WHITE);
g.setFont(new Font("Arial", Font.BOLD, 30));
g.drawString(titleName, 20, 702);
g.drawString(difficulty, 1190, 702);
g.setFont(new Font("Arial", Font.PLAIN, 26));
g.setColor(Color.DARK_GRAY);
g.drawString("S", 270, 609);
g.drawString("D", 374, 609);
g.drawString("F", 478, 609);
g.drawString("Space Bar", 580, 609);
g.drawString("J", 784, 609);
g.drawString("K", 889, 609);
g.drawString("L", 993, 609);
g.setFont(new Font("Elephant", Font.BOLD, 30));
g.drawString("000000", 565, 702);
g.drawImage(blueFlareImage, 320, 330, null);
g.drawImage(judgeImage, 460, 420, null);
g.drawImage(keyPadSImage, 228, 580, null);
g.drawImage(keyPadDImage, 332, 580, null);
g.drawImage(keyPadFImage, 436, 580, null);
g.drawImage(keyPadSpace1Image, 540, 580, null);
g.drawImage(keyPadSpace2Image, 640, 580, null);
g.drawImage(keyPadJImage, 744, 580, null);
g.drawImage(keyPadKImage, 848, 580, null);
g.drawImage(keyPadLImage, 952, 580, null);
}
public void pressS() {//키 입력 이벤트 처리
judge("S"); //판정처리
noteRouteSImage = new
ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
keyPadSImage = new
ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage();
new Music("drumSmall1.mp3", false).start();
}
public void releaseS() {
noteRouteSImage = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
keyPadSImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
}
public void pressD() {
judge("D");
noteRouteDImage = new
ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
keyPadDImage = new
ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage();
new Music("drumSmall1.mp3", false).start();
}
public void releaseD() {
noteRouteDImage = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
keyPadDImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
}
public void pressF() {
judge("F");
noteRouteFImage = new
ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
keyPadFImage = new
ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage();
new Music("drumSmall1.mp3", false).start();
}
public void releaseF() {
noteRouteFImage = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
keyPadFImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
}
public void pressSpace() {
judge("Space");
noteRouteSpace1Image = new
ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
keyPadSpace1Image = new
ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage();
noteRouteSpace2Image = new
ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
keyPadSpace2Image = new
ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage();
new Music("drumBig1.mp3", false).start();
}
public void releaseSpace() {
noteRouteSpace1Image = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
keyPadSpace1Image = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
noteRouteSpace2Image = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
keyPadSpace2Image = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
}
public void pressJ() {
judge("J");
noteRouteJImage = new
ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
keyPadJImage = new
ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage();
new Music("drumSmall1.mp3", false).start();
}
public void releaseJ() {
noteRouteJImage = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
keyPadJImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
}
public void pressK() {
judge("K");
noteRouteKImage = new
ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
keyPadKImage = new
ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage();
new Music("drumSmall1.mp3", false).start();
}
public void releaseK() {
noteRouteKImage = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
keyPadKImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
}
public void pressL() {
judge("L");
noteRouteLImage = new
ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
keyPadLImage = new
ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage();
new Music("drumSmall1.mp3", false).start();
}
public void releaseL() {
noteRouteLImage = new
ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage();
keyPadLImage = new
ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage();
}
@Override
public void run() {
dropNotes(this.titleName);
}
public void close() {
gameMusic.close();
this.interrupt();
}
public void dropNotes(String titleName) {
Beat[] beats = null;
if (titleName.equals("Mighty Love - Joakim
Karud")&&difficulty.equals("Easy")) { //노트 떨구기
int startTime = 4300 - Main.REACH_TIME * 1000;
int gap = 125;
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, "J"),
new Beat(startTime + gap * 12, "K"), new
Beat(startTime + gap * 14, "S"),
new Beat(startTime + gap * 16, "D"), new
Beat(startTime + gap * 18, "K"),
new Beat(startTime + gap * 20, "L"), new
Beat(startTime + gap * 22, "J"),
new Beat(startTime + gap * 24, "D"), new
Beat(startTime + gap * 26, "F"),
new Beat(startTime + gap * 28, "D"), new
Beat(startTime + gap * 30, "F"),
new Beat(startTime + gap * 32, "K"), new
Beat(startTime + gap * 34, "D"),
new Beat(startTime + gap * 36, "S"), new
Beat(startTime + gap * 38, "F"),
new Beat(startTime + gap * 40, "L"), new
Beat(startTime + gap * 42, "K"),
new Beat(startTime + gap * 44, "Space"), new
Beat(startTime + gap * 46, "J"),
new Beat(startTime + gap * 48, "D"), new
Beat(startTime + gap * 49, "K"),
new Beat(startTime + gap * 50, "S"), new
Beat(startTime + gap * 52, "Space"),
new Beat(startTime + gap * 52, "F"), new
Beat(startTime + gap * 52, "D") };
}else if (titleName.equals("Mighty Love - Joakim
Karud")&&difficulty.equals("Hard")) {
int startTime = 1000;
beats = new Beat[] { new Beat(startTime, "Space"), };
} else if (titleName.equals("Joakim Karud - Wild
Flower")&&difficulty.equals("Easy")) {
int startTime = 1000;
beats = new Beat[] { new Beat(startTime, "Space"), };
} else if (titleName.equals("Joakim Karud - Wild
Flower")&&difficulty.equals("Hard")) {
int startTime = 1000;
beats = new Beat[] { new Beat(startTime, "Space"), };
}
else if (titleName.equals("Energy-
Bensound")&&difficulty.equals("Easy")) {
int startTime = 1000;
beats = new Beat[] { new Beat(startTime, "Space"), };
}else if (titleName.equals("Energy-
Bensound")&&difficulty.equals("Hard")) {
int startTime = 1000;
beats = new Beat[] { new Beat(startTime, "Space"), };
}
else if (titleName.equals("MommySon - Boy
Jump")&&difficulty.equals("Easy")) {
int startTime = 3300 - Main.REACH_TIME * 1000;
int gap = 125;
beats = new Beat[] { new Beat(startTime, "Space"), new
Beat(startTime + gap * 22, "S"),
new Beat(startTime + gap * 28, "D"), new
Beat(startTime + gap * 41, "J"),
new Beat(startTime + gap * 45, "K"), new
Beat(startTime + gap * 54, "L"),
new Beat(startTime + gap * 75, "S"),new
Beat(startTime + gap * 85, "D"),
new Beat(startTime + gap * 92, "Space"), new
Beat(startTime + gap * 95, "Space"),
new Beat(startTime + gap * 98, "Space"), new
Beat(startTime + gap * 101, "Space"),
new Beat(startTime + gap * 105, "J"), new
Beat(startTime + gap * 111, "K"),
new Beat(startTime + gap * 117, "J"), new
Beat(startTime + gap * 123, "K"),
new Beat(startTime + gap * 131, "S"), new
Beat(startTime + gap * 137, "D"),
new Beat(startTime + gap * 144, "S"), new
Beat(startTime + gap * 150, "D"),
new Beat(startTime + gap * 157, "S"), new
Beat(startTime + gap * 163, "D"),
new Beat(startTime + gap * 169, "S"), new
Beat(startTime + gap * 175, "D"),
new Beat(startTime + gap * 182, "S"),
};
}else if (titleName.equals("MommySon - Boy
Jump")&&difficulty.equals("Hard")) {
int startTime = 1000;
beats = new Beat[] { new Beat(startTime, "Space"), };
}
int i = 0;
gameMusic.start();
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 (InterruptedException e) {
}
}
}
}
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/Miss.png")).getImage();
}
else if(judge.equals("Late")) {
judgeImage = new
ImageIcon(Main.class.getResource("../images/Late.png")).getImage();
}
else if(judge.equals("Good")) {
judgeImage = new
ImageIcon(Main.class.getResource("../images/Good.png")).getImage();
}
else if(judge.equals("Great")) {
judgeImage = new
ImageIcon(Main.class.getResource("../images/Great.png")).getImage();
}
else if(judge.equals("Perfect")) {
judgeImage = new
ImageIcon(Main.class.getResource("../images/Perfect.png")).getImage();
}
else if(judge.equals("Early")) {
judgeImage = new
ImageIcon(Main.class.getResource("../images/Early.png")).getImage();
}
}
}
Beat.java
package dynamic_beat_17;
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;
}
}
Music.java
package dynamic_beat_17;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import javazoom.jl.player.Player;
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 = new File(Main.class.getResource("../music/" +
name).toURI());
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
player = new Player(bis);
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
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);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

More Related Content

Recently uploaded

Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...Sapna Thakur
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpinRaunakKeshri1
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactPECB
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Celine George
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...fonyou31
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Sapana Sha
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdfSoniaTolstoy
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...christianmathematics
 

Recently uploaded (20)

Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Java termproject

  • 1. 자바 텀 프로젝트 결과 보고서 6조 조원 : 20153030 정규빈 20153034 최철민
  • 2. 목차 1. 메인 화면 - 시작버튼 - 종료버튼 - 인트로 뮤직 2. 곡 선택 - 다음 곡 버튼 - 이전 곡 버튼 - 현재 선택하고 있는 곡 재생 - easy hard 버튼 3. 게임실행 - 박자에 맞춘 노트 떨구기 - 키 클릭 이벤트 처리 - y좌표에 따른 판정 처리 - 뒤로 가기 버튼
  • 3. 4. 코드설명 1. 메인 화면 검은색 전원 버튼은 시작하기로 마우스 클릭 시 곡 선택 화면으로 전환 된다. 빨간색 전원 버튼은 종료하기로 마우스 클릭 시 종료된다. 오른쪽 상단에 있는 x버튼 또한 종료버튼이다.
  • 4. 2. 곡 선택 파란색 다음 곡 버튼과 이전 버튼으로 곡을 변경할 수 있다. easy hard 버튼으로 난이도를 선택하여 게임을 실행할 수 있다.
  • 5. 3. 게임실행 설정해둔 비트 순서로 노트가 시간의 변화에 따라 떨어진다. 노트의 y좌표가 실시간으로 변하고 노트가 판정선에 가까워
  • 6. 지면 키를 입력한다. 그 때 키패드의 y좌표와 노트의 y좌표를 비교해서 판정 그 에 맞는 판정 결과가 정중앙에 나타난다. 마지막으로 왼쪽 상단에 있는 되돌아가기 버튼을 클릭 시 곡 선택 화면으로 돌아간다. 4. 코드 설명 Main.java package dynamic_beat_17; public class Main { public static final int SCREEN_WIDTH = 1280; //창의 가로 크기 public static final int SCREEN_HEIGHT = 720; //창의 세로 크기 public static final int NOTE_SPEED = 3; public static final int SLEEP_TIME = 10; public static final int REACH_TIME = 2; public static void main(String[] args) { new DynamicBeat(); } } DynamicBeat.java
  • 7. package dynamic_beat_17; import java.awt.Color; import java.awt.Cursor; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.util.ArrayList; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class DynamicBeat extends JFrame { private Image screenImage; private Graphics screenGraphic; //버튼이미지 삽입 private ImageIcon exitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/exitButtonEntered.jpg")); private ImageIcon exitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/exitButtonBasic2.jpg")); private ImageIcon startButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/startEntered.png")); private ImageIcon startButtonBasicImage = new ImageIcon(Main.class.getResource("../images/startBasic.png")); private ImageIcon quitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/quitEntered.png")); private ImageIcon quitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/quitBasic.png")); private ImageIcon leftButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/leftButtonEntered.png")); private ImageIcon leftButtonBasicImage = new ImageIcon(Main.class.getResource("../images/leftButtonBasic.png")); private ImageIcon rightButtonEnteredImage = new ImageIcon( Main.class.getResource("../images/rightButtonEntered.png")); private ImageIcon rightButtonBasicImage = new ImageIcon(Main.class.getResource("../images/rightButtonBasic.png")); private ImageIcon easyButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/easyButtonEntered.png")); private ImageIcon easyButtonBasicImage = new ImageIcon(Main.class.getResource("../images/easyButtonBasic.png")); private ImageIcon hardButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/hardButtonEntered.png")); private ImageIcon hardButtonBasicImage = new ImageIcon(Main.class.getResource("../images/hardButtonBasic.png")); private ImageIcon backButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/backButtonEntered.png")); private ImageIcon backButtonBasicImage = new ImageIcon(Main.class.getResource("../images/backButtonBasic.png"));
  • 8. private Image background = new ImageIcon(Main.class.getResource("../images/introbackground(title).jpg")).getImage (); private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png"))); private JButton exitButton = new JButton(exitButtonBasicImage); private JButton startButton = new JButton(startButtonBasicImage); private JButton quitButton = new JButton(quitButtonBasicImage); private JButton leftButton = new JButton(leftButtonBasicImage); private JButton rightButton = new JButton(rightButtonBasicImage); private JButton easyButton = new JButton(easyButtonBasicImage); private JButton hardButton = new JButton(hardButtonBasicImage); private JButton backButton = new JButton(backButtonBasicImage); private int mouseX, mouseY; private boolean isMainScreen = false; private boolean isGameScreen = false; ArrayList<Track> trackList = new ArrayList<Track>(); private Image titleImage; private Image selectedImage; private Music selectedMusic; private Music introMusic = new Music("intromusic2.mp3", true); private int nowSelected = 0; public static Game game; public DynamicBeat() { trackList.add(new Track("Mighty Love Title Image.png", "Mighty Love Start Image.jpg", "Mighty Love Game Image.jpg", "Mighty Love - Joakim Karud.mp3", "Mighty Love - Joakim Karud.mp3", "Mighty Love - Joakim Karud")); trackList.add(new Track("Wild Flower Title Image.png", "Wild Flower Start Image.jpg", "Wild Flower Game Image.jpg", "Joakim Karud - Wild Flower.mp3", "Joakim Karud - Wild Flower.mp3", "Joakim Karud - Wild Flower")); trackList.add(new Track("Energy Title Image.png", "Energy Start Image.jpg", "Energy Game Image.jpg", "Energy-Bensound.mp3", "Energy-Bensound.mp3", "Energy-Bensound")); trackList.add(new Track("Boy Jump Title Image.png", "Boy Jump Start Image.png", "Boy Jump Game Image.png", "MommySon - Boy Jump.mp3", "MommySon - Boy Jump.mp3", "MommySon - Boy Jump")); // 트랙 이미지 음악 추가 setUndecorated(true); setTitle("Dynamic Beat");
  • 9. setSize(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); setResizable(false); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); setBackground(new Color(0, 0, 0, 0)); setLayout(null); addKeyListener(new KeyListener()); introMusic.start(); exitButton.setBounds(1245, 0, 30, 30); //x버튼 위치 설정 exitButton.setBorderPainted(false); exitButton.setContentAreaFilled(false); exitButton.setFocusPainted(false); exitButton.addMouseListener(new MouseAdapter() { @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 mouseExited(MouseEvent e) { exitButton.setIcon(exitButtonBasicImage); exitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @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(exitButton); startButton.setBounds(40, 200, 200, 200); startButton.setBorderPainted(false); startButton.setContentAreaFilled(false);
  • 10. startButton.setFocusPainted(false); startButton.addMouseListener(new MouseAdapter() { @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 mouseExited(MouseEvent e) { startButton.setIcon(startButtonBasicImage); startButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mousePressed(MouseEvent e) { Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false); buttonEnteredMusic.start(); enterMain(); } }); add(startButton); quitButton.setBounds(40, 330, 200, 200); quitButton.setBorderPainted(false); quitButton.setContentAreaFilled(false); quitButton.setFocusPainted(false); quitButton.addMouseListener(new MouseAdapter() { @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 mouseExited(MouseEvent e) { quitButton.setIcon(quitButtonBasicImage); quitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mousePressed(MouseEvent e) { Music buttonEnteredMusic = new
  • 11. Music("buttonPressedMusic.mp3", false); buttonEnteredMusic.start(); try { Thread.sleep(1000); } catch (InterruptedException ex) { ex.printStackTrace(); } System.exit(0); } }); add(quitButton); leftButton.setVisible(false); leftButton.setBounds(140, 310, 60, 60); leftButton.setBorderPainted(false); leftButton.setContentAreaFilled(false); leftButton.setFocusPainted(false); leftButton.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { leftButton.setIcon(leftButtonEnteredImage); leftButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false); buttonEnteredMusic.start(); } @Override public void mouseExited(MouseEvent e) { leftButton.setIcon(leftButtonBasicImage); leftButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mousePressed(MouseEvent e) { Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false); buttonEnteredMusic.start(); selectLeft(); } }); add(leftButton); rightButton.setVisible(false); rightButton.setBounds(1080, 310, 60, 60); rightButton.setBorderPainted(false); rightButton.setContentAreaFilled(false); rightButton.setFocusPainted(false); rightButton.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { rightButton.setIcon(rightButtonEnteredImage); rightButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
  • 12. Music buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false); buttonEnteredMusic.start(); } @Override public void mouseExited(MouseEvent e) { rightButton.setIcon(rightButtonBasicImage); rightButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mousePressed(MouseEvent e) { Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false); buttonEnteredMusic.start(); selectRight(); } }); add(rightButton); easyButton.setVisible(false); easyButton.setBounds(375, 580, 200, 100); easyButton.setBorderPainted(false); easyButton.setContentAreaFilled(false); easyButton.setFocusPainted(false); easyButton.addMouseListener(new MouseAdapter() { @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 mouseExited(MouseEvent e) { easyButton.setIcon(easyButtonBasicImage); easyButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mousePressed(MouseEvent e) { Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false); buttonEnteredMusic.start(); gameStart(nowSelected, "Easy"); } }); add(easyButton);
  • 13. hardButton.setVisible(false); hardButton.setBounds(655, 580, 200, 100); hardButton.setBorderPainted(false); hardButton.setContentAreaFilled(false); hardButton.setFocusPainted(false); hardButton.addMouseListener(new MouseAdapter() { @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 mouseExited(MouseEvent e) { hardButton.setIcon(hardButtonBasicImage); hardButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mousePressed(MouseEvent e) { Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false); buttonEnteredMusic.start(); gameStart(nowSelected, "Hard"); } }); add(hardButton); backButton.setVisible(false); backButton.setBounds(20, 50, 60, 60); backButton.setBorderPainted(false); backButton.setContentAreaFilled(false); backButton.setFocusPainted(false); backButton.addMouseListener(new MouseAdapter() { @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 mouseExited(MouseEvent e) { backButton.setIcon(backButtonBasicImage); backButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); }
  • 14. @Override public void mousePressed(MouseEvent e) { Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false); buttonEnteredMusic.start(); backMain(); } }); add(backButton); menuBar.setBounds(0, 0, 1280, 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); } public void paint(Graphics g) { screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); screenGraphic = screenImage.getGraphics(); screenDraw((Graphics2D) screenGraphic); g.drawImage(screenImage, 0, 0, null); } public void screenDraw(Graphics2D g) { g.drawImage(background, 0, 0, null); if (isMainScreen) { g.drawImage(selectedImage, 340, 100, null); //곡선택 화면 g.drawImage(titleImage, 340, 70, null); } if (isGameScreen) { game.screenDraw(g); } paintComponents(g); try { Thread.sleep(5); } catch (Exception e) { e.printStackTrace(); } this.repaint(); }
  • 15. 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 selectLeft() { 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(); isMainScreen = false; //메인화면 끄기 leftButton.setVisible(false); //이전 버튼 안보이게 하기 rightButton.setVisible(false); easyButton.setVisible(false); hardButton.setVisible(false); background = new ImageIcon(Main.class.getResource("../images/" + trackList.get(nowSelected).getGameImage())) .getImage(); backButton.setVisible(true); isGameScreen = true; game = new Game(trackList.get(nowSelected).getTitleName(), difficulty, trackList.get(nowSelected).getGameMusic()); game.start(); setFocusable(true); } public void backMain() { isMainScreen = true; leftButton.setVisible(true); rightButton.setVisible(true); easyButton.setVisible(true);
  • 16. hardButton.setVisible(true); background = new ImageIcon(Main.class.getResource("../images/mainbackground.jpg")).getImage(); backButton.setVisible(false); selectTrack(nowSelected); isGameScreen = false; game.close(); } public void enterMain() { startButton.setVisible(false); quitButton.setVisible(false); background = new ImageIcon(Main.class.getResource("../images/mainbackground.jpg")).getImage(); isMainScreen = true; leftButton.setVisible(true); rightButton.setVisible(true); easyButton.setVisible(true); hardButton.setVisible(true); introMusic.close(); selectTrack(0); } } KeyListener.Java package dynamic_beat_17; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; public class KeyListener extends KeyAdapter { @Override public void keyPressed(KeyEvent e) { if(DynamicBeat.game ==null) { // 키 리스너 설정 입력시와 뗏을 때 return; } if (e.getKeyCode() == KeyEvent.VK_S) { DynamicBeat.game.pressS(); } else if (e.getKeyCode() == KeyEvent.VK_D) { DynamicBeat.game.pressD(); } else if (e.getKeyCode() == KeyEvent.VK_F) { DynamicBeat.game.pressF(); } else if (e.getKeyCode() == KeyEvent.VK_SPACE) { DynamicBeat.game.pressSpace(); } else if (e.getKeyCode() == KeyEvent.VK_J) {
  • 17. DynamicBeat.game.pressJ(); } else if (e.getKeyCode() == KeyEvent.VK_K) { DynamicBeat.game.pressK(); } else if (e.getKeyCode() == KeyEvent.VK_L) { DynamicBeat.game.pressL(); } } @Override public void keyReleased(KeyEvent e) { if(DynamicBeat.game ==null) { return; } if (e.getKeyCode() == KeyEvent.VK_S) { DynamicBeat.game.releaseS(); } else if (e.getKeyCode() == KeyEvent.VK_D) { DynamicBeat.game.releaseD(); } else if (e.getKeyCode() == KeyEvent.VK_F) { DynamicBeat.game.releaseF(); } else if (e.getKeyCode() == KeyEvent.VK_SPACE) { DynamicBeat.game.releaseSpace(); } else if (e.getKeyCode() == KeyEvent.VK_J) { DynamicBeat.game.releaseJ(); } else if (e.getKeyCode() == KeyEvent.VK_K) { DynamicBeat.game.releaseK(); } else if (e.getKeyCode() == KeyEvent.VK_L) { DynamicBeat.game.releaseL(); } } } Track.java package dynamic_beat_17; public class Track {
  • 18. 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) {// Track 생성자 super(); this.titleImage = titleImage; this.startImage = startImage; this.gameImage = gameImage; this.startMusic = startMusic; this.gameMusic = gameMusic; this.titleName = titleName; }
  • 19. } Note.java package dynamic_beat_17; import java.awt.Graphics2D; import java.awt.Image; import javax.swing.ImageIcon; public class Note extends Thread { private Image noteBasicImage = new ImageIcon(Main.class.getResource("../images/noteBasic.png")).getImage(); private int x, y = 580 - (1000 / Main.SLEEP_TIME * Main.NOTE_SPEED) * Main.REACH_TIME; //노트의 떨어지는 속도 제어 private String noteType; private boolean proceeded = true; public String getNoteType() { return noteType; } public boolean isProceeded() { return proceeded; } public void close() { proceeded = false; } public Note(String noteType) { //키패드 설정 if (noteType.equals("S")) { x = 228; } else if (noteType.equals("D")) { x = 332; } else if (noteType.equals("F")) { x = 436; } else if (noteType.equals("Space")) { x = 540; } else if (noteType.equals("J")) { x = 744; } else if (noteType.equals("K")) { x = 848; } else if (noteType.equals("L")) { x = 952; } this.noteType = noteType; }
  • 20. public void screenDraw(Graphics2D g) { if (!noteType.equals("Space")) { g.drawImage(noteBasicImage, x, y, null); } else { g.drawImage(noteBasicImage, x, y, null); g.drawImage(noteBasicImage, x + 100, y, null); } } public void drop() { y += Main.NOTE_SPEED; if(y>620) { 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) { System.err.println(e.getMessage()); } } public String judge() { //노트판정 조건 if(y>=613) { System.out.println("Late"); close(); return "Late"; } else if(y>=600) { System.out.println("Good"); close(); return "Good"; } else if(y>=587) { System.out.println("Great"); close(); return "Great"; } else if(y>=573) { System.out.println("Perfect");
  • 21. close(); return "Perfect"; } else if(y>=565) { System.out.println("Great"); close(); return "Great"; } else if(y>=550) { System.out.println("Good"); close(); return "Good"; } else if(y>=535) { System.out.println("Early"); close(); return "Early"; } return "None"; } public int getY() { return y; } } Game.java package dynamic_beat_17; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.util.ArrayList; import javax.swing.ImageIcon; public class Game extends Thread { private Image noteRouteLineImage = new ImageIcon(Main.class.getResource("../images/noteRouteLine.png")).getImage(); private Image judgementLineImage = new ImageIcon(Main.class.getResource("../images/judgementLine.png")).getImage(); private Image gameInfoImage = new ImageIcon(Main.class.getResource("../images/gameInfo.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();
  • 22. private Image noteRouteSpace1Image = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); private Image noteRouteSpace2Image = 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 Image keyPadSImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); private Image keyPadDImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); private Image keyPadFImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); private Image keyPadSpace1Image = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); private Image keyPadSpace2Image = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); private Image keyPadJImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); private Image keyPadKImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); private Image keyPadLImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); private String titleName; private String difficulty; private String musicTitle; 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(noteRouteSImage, 228, 30, null); g.drawImage(noteRouteDImage, 332, 30, null); g.drawImage(noteRouteFImage, 436, 30, null); g.drawImage(noteRouteSpace1Image, 540, 30, null); g.drawImage(noteRouteSpace2Image, 640, 30, null); g.drawImage(noteRouteJImage, 744, 30, null); g.drawImage(noteRouteKImage, 848, 30, null); g.drawImage(noteRouteLImage, 952, 30, null); g.drawImage(noteRouteLineImage, 224, 30, null); g.drawImage(noteRouteLineImage, 328, 30, null); g.drawImage(noteRouteLineImage, 432, 30, null); g.drawImage(noteRouteLineImage, 536, 30, null);
  • 23. g.drawImage(noteRouteLineImage, 740, 30, null); g.drawImage(noteRouteLineImage, 844, 30, null); g.drawImage(noteRouteLineImage, 948, 30, null); g.drawImage(noteRouteLineImage, 1052, 30, null); g.drawImage(gameInfoImage, 0, 660, null); g.drawImage(judgementLineImage, 0, 580, null); for (int i = 0; i < noteList.size(); i++) { Note note = noteList.get(i); if(note.getY() > 620) { judgeImage = new ImageIcon(Main.class.getResource("../images/Miss.png")).getImage(); } if(!note.isProceeded()) { noteList.remove(i); i--; } else { note.screenDraw(g); } note.screenDraw(g); } g.setColor(Color.WHITE); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.BOLD, 30)); g.drawString(titleName, 20, 702); g.drawString(difficulty, 1190, 702); g.setFont(new Font("Arial", Font.PLAIN, 26)); g.setColor(Color.DARK_GRAY); g.drawString("S", 270, 609); g.drawString("D", 374, 609); g.drawString("F", 478, 609); g.drawString("Space Bar", 580, 609); g.drawString("J", 784, 609); g.drawString("K", 889, 609); g.drawString("L", 993, 609); g.setFont(new Font("Elephant", Font.BOLD, 30)); g.drawString("000000", 565, 702); g.drawImage(blueFlareImage, 320, 330, null); g.drawImage(judgeImage, 460, 420, null); g.drawImage(keyPadSImage, 228, 580, null); g.drawImage(keyPadDImage, 332, 580, null); g.drawImage(keyPadFImage, 436, 580, null); g.drawImage(keyPadSpace1Image, 540, 580, null); g.drawImage(keyPadSpace2Image, 640, 580, null); g.drawImage(keyPadJImage, 744, 580, null); g.drawImage(keyPadKImage, 848, 580, null); g.drawImage(keyPadLImage, 952, 580, null); } public void pressS() {//키 입력 이벤트 처리 judge("S"); //판정처리 noteRouteSImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage();
  • 24. keyPadSImage = new ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage(); new Music("drumSmall1.mp3", false).start(); } public void releaseS() { noteRouteSImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); keyPadSImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); } public void pressD() { judge("D"); noteRouteDImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage(); keyPadDImage = new ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage(); new Music("drumSmall1.mp3", false).start(); } public void releaseD() { noteRouteDImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); keyPadDImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); } public void pressF() { judge("F"); noteRouteFImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage(); keyPadFImage = new ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage(); new Music("drumSmall1.mp3", false).start(); } public void releaseF() { noteRouteFImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); keyPadFImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); } public void pressSpace() { judge("Space"); noteRouteSpace1Image = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage(); keyPadSpace1Image = new ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage(); noteRouteSpace2Image = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage(); keyPadSpace2Image = new ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage(); new Music("drumBig1.mp3", false).start();
  • 25. } public void releaseSpace() { noteRouteSpace1Image = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); keyPadSpace1Image = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); noteRouteSpace2Image = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); keyPadSpace2Image = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); } public void pressJ() { judge("J"); noteRouteJImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage(); keyPadJImage = new ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage(); new Music("drumSmall1.mp3", false).start(); } public void releaseJ() { noteRouteJImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); keyPadJImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); } public void pressK() { judge("K"); noteRouteKImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage(); keyPadKImage = new ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage(); new Music("drumSmall1.mp3", false).start(); } public void releaseK() { noteRouteKImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); keyPadKImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); } public void pressL() { judge("L"); noteRouteLImage = new ImageIcon(Main.class.getResource("../images/noteRoutePressed.png")).getImage(); keyPadLImage = new ImageIcon(Main.class.getResource("../images/keyPadPressed.png")).getImage(); new Music("drumSmall1.mp3", false).start(); } public void releaseL() {
  • 26. noteRouteLImage = new ImageIcon(Main.class.getResource("../images/noteRoute.png")).getImage(); keyPadLImage = new ImageIcon(Main.class.getResource("../images/keyPadBasic.png")).getImage(); } @Override public void run() { dropNotes(this.titleName); } public void close() { gameMusic.close(); this.interrupt(); } public void dropNotes(String titleName) { Beat[] beats = null; if (titleName.equals("Mighty Love - Joakim Karud")&&difficulty.equals("Easy")) { //노트 떨구기 int startTime = 4300 - Main.REACH_TIME * 1000; int gap = 125; 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, "J"), new Beat(startTime + gap * 12, "K"), new Beat(startTime + gap * 14, "S"), new Beat(startTime + gap * 16, "D"), new Beat(startTime + gap * 18, "K"), new Beat(startTime + gap * 20, "L"), new Beat(startTime + gap * 22, "J"), new Beat(startTime + gap * 24, "D"), new Beat(startTime + gap * 26, "F"), new Beat(startTime + gap * 28, "D"), new Beat(startTime + gap * 30, "F"), new Beat(startTime + gap * 32, "K"), new Beat(startTime + gap * 34, "D"), new Beat(startTime + gap * 36, "S"), new Beat(startTime + gap * 38, "F"), new Beat(startTime + gap * 40, "L"), new Beat(startTime + gap * 42, "K"), new Beat(startTime + gap * 44, "Space"), new Beat(startTime + gap * 46, "J"), new Beat(startTime + gap * 48, "D"), new Beat(startTime + gap * 49, "K"), new Beat(startTime + gap * 50, "S"), new Beat(startTime + gap * 52, "Space"), new Beat(startTime + gap * 52, "F"), new Beat(startTime + gap * 52, "D") }; }else if (titleName.equals("Mighty Love - Joakim Karud")&&difficulty.equals("Hard")) { int startTime = 1000; beats = new Beat[] { new Beat(startTime, "Space"), };
  • 27. } else if (titleName.equals("Joakim Karud - Wild Flower")&&difficulty.equals("Easy")) { int startTime = 1000; beats = new Beat[] { new Beat(startTime, "Space"), }; } else if (titleName.equals("Joakim Karud - Wild Flower")&&difficulty.equals("Hard")) { int startTime = 1000; beats = new Beat[] { new Beat(startTime, "Space"), }; } else if (titleName.equals("Energy- Bensound")&&difficulty.equals("Easy")) { int startTime = 1000; beats = new Beat[] { new Beat(startTime, "Space"), }; }else if (titleName.equals("Energy- Bensound")&&difficulty.equals("Hard")) { int startTime = 1000; beats = new Beat[] { new Beat(startTime, "Space"), }; } else if (titleName.equals("MommySon - Boy Jump")&&difficulty.equals("Easy")) { int startTime = 3300 - Main.REACH_TIME * 1000; int gap = 125; beats = new Beat[] { new Beat(startTime, "Space"), new Beat(startTime + gap * 22, "S"), new Beat(startTime + gap * 28, "D"), new Beat(startTime + gap * 41, "J"), new Beat(startTime + gap * 45, "K"), new Beat(startTime + gap * 54, "L"), new Beat(startTime + gap * 75, "S"),new Beat(startTime + gap * 85, "D"), new Beat(startTime + gap * 92, "Space"), new Beat(startTime + gap * 95, "Space"), new Beat(startTime + gap * 98, "Space"), new Beat(startTime + gap * 101, "Space"), new Beat(startTime + gap * 105, "J"), new Beat(startTime + gap * 111, "K"), new Beat(startTime + gap * 117, "J"), new Beat(startTime + gap * 123, "K"), new Beat(startTime + gap * 131, "S"), new Beat(startTime + gap * 137, "D"), new Beat(startTime + gap * 144, "S"), new Beat(startTime + gap * 150, "D"), new Beat(startTime + gap * 157, "S"), new Beat(startTime + gap * 163, "D"), new Beat(startTime + gap * 169, "S"), new Beat(startTime + gap * 175, "D"), new Beat(startTime + gap * 182, "S"), }; }else if (titleName.equals("MommySon - Boy
  • 28. Jump")&&difficulty.equals("Hard")) { int startTime = 1000; beats = new Beat[] { new Beat(startTime, "Space"), }; } int i = 0; gameMusic.start(); 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 (InterruptedException e) { } } } } 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/Miss.png")).getImage(); } else if(judge.equals("Late")) { judgeImage = new ImageIcon(Main.class.getResource("../images/Late.png")).getImage(); } else if(judge.equals("Good")) { judgeImage = new ImageIcon(Main.class.getResource("../images/Good.png")).getImage(); } else if(judge.equals("Great")) { judgeImage = new ImageIcon(Main.class.getResource("../images/Great.png")).getImage(); } else if(judge.equals("Perfect")) { judgeImage = new
  • 29. ImageIcon(Main.class.getResource("../images/Perfect.png")).getImage(); } else if(judge.equals("Early")) { judgeImage = new ImageIcon(Main.class.getResource("../images/Early.png")).getImage(); } } } Beat.java package dynamic_beat_17; 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; } } Music.java package dynamic_beat_17; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import javazoom.jl.player.Player; public class Music extends Thread{
  • 30. 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 = new File(Main.class.getResource("../music/" + name).toURI()); fis = new FileInputStream(file); bis = new BufferedInputStream(fis); player = new Player(bis); } catch(Exception e) { System.out.println(e.getMessage()); } } 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); } catch (Exception e) { System.out.println(e.getMessage()); } } }