드래곤 키우기 게임 - zoe

드래곤 키우기 게임

나만의 드래곤을 키워 몬스터와 대결하는 게임

2022. 04. 30 ~ 2022. 05. 14

사용 기술 스택

폴더 구조 (패키지 구조)

프로젝트 예시 화면

프로젝트 회고

문제1
- 문제 발생 클래스: Reptile

- 문제 상황과 관련된 선언 멤버: fight 메서드(싸우기 메서드), fight 메서드에 필요한 hp 필드
- hp 필드는 사람마다 건강 상태가 다르듯 100~130 사이입니다.

문제

- 드래곤 객체 생성 시 hp(체력) 필드를 100~130 사이로 초기화했습니다. 그런데 객체가 생성되자마자 hp가 0 이하면 게임이 종료되는 종료 조건에 걸려 게임이 종료되는 버그가 발생했습니다.

- 문제를 해결하기 위해 한 노력

- 1~10 사이였던 hp 필드 범위를 100 이상 130이하로 바꾼 뒤 생긴 문제라 문제 발생 원인을 특정하기 쉬웠습니다. hp 필드를 콘솔창에 출력해보니 -128이 나왔습니다.

해결

- 이는 hp 필드의 자료형이 byte였는데 hp가 byte 표현 범위를 벗어나서 생기는 일이었습니다. (byte 표현범위: -128~127) 자료형의 범위를 벗어났을 경우 쓰레기 값이 나오는 것을 기존에 알고 있었기 때문에 -128이라는 출력 값을 보자마자 자료형을 int로 바꿔줘서 문제를 해결할 수 있었습니다.

문제2
- 문제 발생 클래스(GUI)

- 드래곤을 그려주는 그리기 전용 패널(A)과 드래곤의 행동 메서드를 호출해주는 버튼들을 관리해주는 패널(B)

문제

- A패널에 B 패널을 추가했을 때 B패널이 시각적으로 보이지 않는 문제가 발생했습니다.

원인

- 이는 A패널의 이미지 아래에 B패널이 추가되기 때문인 것 같았습니다. → B패널이 보이지 않다가 프로그램 진행 상황에 따라 A패널에 아예 새로운 이미지를 그려줄 때, B패널이 갑자기 보일 때가 있어서 컴포넌트들 간의 순서상의 이슈가 있다고 판단했습니다.

해결

- 필요 사전 지식 : JLayerPane은 Java Swing(GUI)의 컨테이너에 깊이를 적용해서 컨테이너들을 겹쳐서 사용할 수 있도록 하는 컨테이너입니다. 이 컨테이너 객체에 컴포넌트들을 추가할 때 보여줄 순서를 정해줄 수 있습니다.

- 위의 지식을 사용해서 JLayerPane 클래스의 C패널을 생성해서 A패널과 B패널을 추가할 때 순서를 정해줘서 B패널이 A패널 위에 오게 할 수 있었습니다.

느낀점

기존에 있던 클래스와 코드가 중복되는 클래스를 상속받아 써서 코드 재사용을 막고 보다 간결하게 표현할 수 있었습니다.

스레드를 프로그램에 추가한 뒤 보다 현실성을 부여해서 프로그램의 완성도가 올라갔다는 생각이 들었습니다.

'어떻게 하면 유저가 더 편리하게 사용할 수 있을까' 에 대한 내용을 중점적으로 생각하며 프로그램을 만드는 마음가짐을 가질 수 있었습니다.

개선하고 싶은 점

Dragon을 상속받은 각 클래스에 현재 성장단계를 표시해주는 enum 필드를 추가했다면 성장단계 별 분기처리를 할 때 더 편리했을 것 같습니다.

드래곤의 성장단계별로 클래스를 따로 구현하는 것보다 하나의 클래스에 성장단계 별 접근 가능 멤버를 분기처리 해놓는게 드래곤 객체가 성장하는 시나리오 상으로는 더 합리적인 설계가 됐을 것 같습니다.

프로젝트 참여자

개발 교육과 멘토링을 한 번에!

1:1 멘토링 코딩 부트캠프

상담 신청하기 >