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;
   159   160   161   162   163   164   165   166   167   168   169