본문 바로가기
Team Project/Strikers 1945 GUI Project

[개발 일지] Strikers 1945 게임 구현 프로젝트 5일차 (02/27) ~ 종료

by 스응 2023. 3. 1.
728x90
728x90

5일차에 구현한 것

앞선 일차들에서 밑작업은 모두 끝내 두었다.

그래서 5일차에 Timer와 TimerTask를 이용해서 지연시간 후에 적군 소환 메서드가 호출되게끔 하면

게임을 완성할 수 있었다.

 

1. 적군 소환 흐름 구현

 

// 적군 소환 흐름
public void createEnemy() {
    // 1번째 적군 소환
    unit2ArrayLeftMove();

    Timer timer1 = new Timer();
    long delay1 = 3000L;

    // 2번째 적군 소환
    TimerTask task1 = new TimerTask() {
        @Override
        public void run() {
            unit3OneMove();
        }
    };
    timer1.schedule(task1, delay1);

    // 3번째 적군 소환
    long delay2 = 6000L;
    TimerTask task2 = new TimerTask() {
        @Override
        public void run() {
            unit4ArrayRightMove();
        }
    };
    timer1.schedule(task2, delay2);

 

    적군을 소환하는 메서드들을 따로 정의해두고, createEnemy() 메서드를 따로 만들어서

    여기에 지연시간 후에 하나씩 호출되게 해서 흐름을 구현했다.

    적군은 1분 동안 총 18회 소환되며, 모든 적을 물리쳤을 경우 최고 점수는 24300점이다.

 

2. 게임 오버 화면 추가

 

mContext.gameOver();

Timer timer = new Timer();
TimerTask task = new TimerTask() {

    @Override
    public void run() {
        System.exit(0);
    }
};

long delay = 2000L;
timer.schedule(task, delay);

 

    플레이어가 목숨 3개를 모두 잃게 되면 gameOver 이미지가 표시되며, 2초 후 프레임이 종료된다.

 

    원래 생각했던 것은 재시작할 수 있게 로딩 화면이 새로 나오고 엔터를 누르면 게임이 다시 시작되는 방식이었는데

    그렇게 되려면 게임이 다시 시작될 때마다 객체들을 싹 정리하고? 이런 식으로 하지 않으면 오류가 엄청나게 나온다.

    이 방식은 우리 수준에는 아직 힘들다고 하셔서, 재시작 기능을 포기하고 게임을 종료시키는 방식으로 바꿨다.

 

3. 게임 클리어 화면 추가

 

    주어진 시간 1분이 종료되었을 때 플레이어가 살아 있다면, gameClear 이미지가 표시된다.

 

 

이렇게 해서, 5일차에 게임이 완성되었고 6일차에는 PPT를 만들어서 발표를 진행했다.

 

 


발표 후 피드백

1. EnemyUnit들의 이름을 숫자로 1~4 하지 말고, 각각 이름을 정해줄 것

 

    이 부분은 Unit들을 설계할 때부터 신경이 쓰였는데, 이름이 생각나지 않아 숫자로 지정해두었다가 잊고 있었다.

 

2. Moveable을 Enemy의 것은 따로 분리할 것

 

    Enemy들은 up, down, right, left 메서드를 사용할 때 int speed라는 매개변수를 받아서 사용하고,

    나머지(Player 등)는 매개변수 없이 사용하기 때문에 기존에는 모두 default 메서드로 지정해서 사용하고 있었다.

    (메서드 오버로딩)

    그렇게 하는 것보다는 Enemy만의 Moveable을 따로 만드는 게 낫다고 하셔서, 그 부분을 수정했다.

 

3. 배경에 아이템이나 총알들의 잔상이 남는 버그

 

    이것은 배경이 흐르도록 구현하는 과정에서 repaint() 메서드를 자주 사용하다보니 심해졌을 것이라고 하셨다.

    배경이 흐르지 않도록 만들면 해당 버그가 생기지 않는데.. 그렇게 되면 배경이 너무 밋밋해서

    이 부분은 그냥 감안하기로 했다.

    해결 방안으로는 배경을 gif로 받는 방법이 있다고 한다. 그런데 gif의 용량이 너무 커서 그 방법도 힘들고....

    이번 프로젝트에서 가장 아쉬운 점이었다.

 

반응형
728x90

 

+ 그 외에 아쉬웠던 점

  1) git branch 기능을 거의 활용하지 않았다. (다들 git 사용이 아직 서툴어서..)

      → 가끔 코드 충돌이 날 때가 있었다.

 

  2) 프로젝트 일정 계획을 제대로 세우지 않고, 그때그때 일을 진행한 느낌이다.

      → 다음에 할 때는 계획을 좀 더 착실하게 세워서 진행하고 싶다!

 

  3) 각자가 맡은 코드 부분이 아니면 다른 코드들은 잘 알지 못한다.

      → 나는 4일차에 ArrayList 방식으로 다른 클래스들이 호환되도록 수정하는 과정에서

          다른 코드들을 여러 번 해석하면서 하다보니 대부분 알고 있었는데,

          다른 팀원들은 자신이 한 부분이 아니면 잘 모르는 것 같았다.

          이런 부분들을 어떻게 개선하면 좋을지도 고민해봐야 겠다. (코드 테스트를 모든 팀원들이 해보도록 ..?)

 

그래도 첫 프로젝트치고는 꽤 잘 해낸 것 같다.

잘 시간을 쪼개서 프로젝트에 열중하다보니 몸은 좀 힘들었지만 과정이 정말 재밌었다.

학원을 2달 정도 다니면서, 지금 이 길이 진짜 나한테 맞을까? 나중에 후회하지 않을까?

이런 류의 고민들을 종종 했었는데, 이번 프로젝트를 해보면서 개발자로서의 길을 선택하길 잘했다는 생각이 들었다.

 

 


플레이 영상

#  게임 오버

 

#  게임 클리어

 

#  깃허브 주소

https://github.com/seoyounglee0105/1945project

320x100
반응형

댓글