Page 164 - MDP2022-3
P. 164
제 3 장 소프트웨어 설계
1. 개요
AWT , SWING , 멀티 스레드 , List , JLayer , 상속 ,등 자바의 여러 기능을 이용하여 하나
의 리듬게임을 제작하였다. 소프트웨어가 중심적인 작품인 만큼 공을 들여 코드를 작성하였다.
프로그램의 흐름은 메인화면 -> 게임플레이화면 -> 결과화면 -> 메인화면 순서이며 이는
배경이미지를 바꾸고 화면상에 있는 버튼을 보이게 하거나 안보이게 하는 방식으로 코딩하였다.
이때 2학년때 배운 AWT에 더하여 Swing의 개념이 다수 들어가였으며 게임플레이화면에서
노래를 재생하는 것은 멀티스레드와 JLayer을 이용하여 구현하였다. 상속은 멀티스레드 ,
Jlayer , awt , swing을 이용하기 위해서 사용해줘야 하는 기능이다. 마지막으로 List는 노래를
관리하는데 사용하였다. 자바에서 List는 배열과 비슷하지만 크기를 조정할 수 있는 배열이라는
점에서 일반 배열과는 차이가 있다. 게임 화면에서 노트가 떨어지는데 이는 검은색 노트
이미지를 좌표를 한칸씩 밑으로 내리면서 계속해서 화면에 띄어주는 방식을 이용하였다. 그리고
판정바를 만들어 판정바 이상의 좌표로 넘어가면 노트가 사라지게 처리해 리소스를 최소화
하였다.
판정바에 노트가 걸칠 때 키보드 입력(키 리스너)을 받아 그 좌표에 따라 각각
Miss,Early,Good,Great,Perfect 판정으로 나누었으며 각각 더해지는 점수에도 차이를 두었다.
마지막으로 콤보기능을 넣었는데 30콤보 이상이면 점수가 2배 , 60콤보 이상이면 점수가
4배가 되도록 코딩하였다.
2. 소프트웨어
# Main 클래스
package dynamic_beat_16;
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 int score = 0;
public static int Missscore = 1000;
public static DynamicBeat myGame;
public static void main(String[] args) {
myGame = new DynamicBeat();
}
}
# Beat 클래스
package dynamic_beat_16;
public class Beat {
private int time;
private String noteName;