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