일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 이클립스단축기
- Ajax
- 깃허브 블로그
- 환경설정
- MSI
- 설정
- 순환문
- 백준
- jsp
- 자바
- 오라클
- for문
- 백준문제
- ORA-02292
- while
- 오류모음
- ORA-01407
- 티스토리 블로그
- 오류
- 백준문제풀이
- 무결성 제약조건
- 이클립스
- 전화번호부
- spring
- 공부
- 별 찍기
- 스프링
- 인터페이스
- Oracle
- 파워서플라이
Archives
- Today
- Total
danDevlog
JAVA 리듬게임 만들어 보기 - 1 본문
728x90
Main.java
package dynamic_beat_4;
public class Main {
public static final int SCREEN_WIDTH = 1280;
public static final int SCREEN_HEIGHT = 720;
public static void main(String[] args) {
new DynamicBeat();
}
}
DynamicBeat.java
package dynamic_beat_4;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
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;
// JLabel은 문자열 및 이미지를 화면에 출력 | ImageIcon은 이미지 파일로부터 이미지를 읽음
// exit버튼에 마우스를 접촉시킬때의 이미지들
private ImageIcon exitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/exitButtonEntered.png"));
private ImageIcon exitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/exitButtonBasic.png"));
// 이미지 파일을 얻어온 뒤에, getImage로 이미지 인스턴스를 얻어온 후 이미지 변수에다 초기화함
private Image introBackground = new ImageIcon(Main.class.getResource("../images/introBackground(Title).jpg"))
.getImage();
// menuBar라는 JLabel 객체 생성
private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png")));
// 버튼에 이미지 삽입
private JButton exitButton = new JButton(exitButtonBasicImage);
private int mouseX, mouseY;
public DynamicBeat() {
setUndecorated(true); // 기본적으로 존재하는 윈도우 메뉴바를 없애줌
setTitle("Dynamic Beat");
setSize(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); // 게임창 크기 지정
setResizable(false); // 게임창 크기 재조정 false
setLocationRelativeTo(null); // 항상 화면의 정중앙에 위치하게
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 게임창을 끄면 완전히 종료하게함
setVisible(true); // 게임창을 보이게함
setBackground(new Color(0, 0, 0, 0)); // paintComponents를 했을때 배경이 회색이 아닌 흰색으로 바뀌게 해줌
setLayout(null); // 버튼이나 JLabel을 넣었을때 그 위치 그대로 고정?
exitButton.setBounds(1245, 0, 30, 30); // exit버튼의 위치 및 크기 지정
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);
menuBar.setBounds(0, 0, 1280, 30); // 메뉴바의 위치와 크기 지정
menuBar.addMouseListener(new MouseAdapter() {
// 마우스 클릭 이벤트가 발생했을때 X좌표와 Y좌표를 얻어온다.
@Override
public void mousePressed(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
});
menuBar.addMouseMotionListener(new MouseMotionAdapter() {
// 마우스를 드래그할때 그 순간순간 마다의 x,y좌표를 얻어와서 그 해당위치로 게임창의 위치를 바꿔줌
@Override
public void mouseDragged(MouseEvent e) {
int x = e.getXOnScreen();
int y = e.getYOnScreen();
setLocation(x - mouseX, y - mouseY);
}
});
add(menuBar);
Music introMusic = new Music("lion.mp3", true);
introMusic.start();
}
// 화면을 그려주는 함수
public void paint(Graphics g) {
screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT);
screenGraphic = screenImage.getGraphics();
screenDraw(screenGraphic);
g.drawImage(screenImage, 0, 0, null);
}
public void screenDraw(Graphics g) {
// 배경화면 그려줌
g.drawImage(introBackground, 0, 0, null);
// JLabel 그려줌
paintComponents(g);
this.repaint();
}
}
Music.java
package dynamic_beat_4;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import javazoom.jl.player.Player;
// mp3파일을 실행시키기 위해서 javazoom의 jlayer라는 라이브러리를 포함시켜야한다.
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(); // 해당 스레드를 중지상태로 만듬
}
// Thread를 상속받으면 무조건 사용해야하는 함수
@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());
}
}
}
'클론코딩' 카테고리의 다른 글
JAVA 리듬 게임 만들어보기 - 2 (0) | 2022.03.17 |
---|
Comments