이번 프로젝트에서 스테이지 관련하여 개발을 맡게 되면서 느낀점이나 피드백에 대해서 적어볼까 한다.
처음의 계획 단계에서 많은 이야기가 나왔다.
1. 각 사람들마다 방을 나누는 것 ( 나랜디, 원랜디)
2. 타워의 다중 공격
3. 황금 고블린과 같은 특수 몬스터들
등등의 많은 계획들을 하면서 프로젝트를 진행해 나가고자 했다.
하나의 기능을 정의하고 거기서 정의해야하는 함수들은 어떤 방식이 필요할지 내부에 try Catch를 쓸지 어디서 검증을 할지 등에 대해서 처음에는 상세하게 이야기를 나누지 않았다.
이후에 진행을 하다보니 서로의 코딩 스타일이 다르기도 하고 요구사항과 많이 달라져서 고생을 많이 했다.
이런 일을 겪고나니 좀 더 코드에 대해서 상세하게 요구사항을 설정하고 스타일을 맞춰야겠다고 생각이 들었다.
내쪽의 스테이지 관련 코드에서 이야기를 해보도록 하자
먼저 게임이 시작할 때 클라이언트에서 서버에 게임의 정보를 요구한다.
이 때 요구한 정보를 받기 전에 다음 코드로 넘어가버리는 사태가 발생하는 경우가 생긴다.
이 부분에 대해서 여러가지 해결방법이 있었지만 한분이 클래스의 싱글톤 방식으로 처리를 하여 해결을 했다.
여기서 싱글톤은 하나의 인스턴스만 생성하여 기존의 인스턴스를 활용하는 것인데 다른 클래스의 인스턴스들이 데이터를 공유하게 되는 장점이 있다.
이 프로젝트에서는 클라이언트에서 재활용 되는 객체들이 대부분이어서 이를 하나의 클래스에서 처리하여 데이터의 변경을 즉각적으로 반영할 수 있게되었다.
먼저 클라이언트에서 서버에 게임 시작을 알리기 위하여 'event' 방식으로 서버에 정보를 보내주어
서버의 handler에서 요청을 받아 생성된 스테이지를 넘겨 클라이언트에서 정보를 갱신하도록 만들었지만,
서버에서 변경된 정보를 클라이언트에서 갱신하는 중에 멈추지 않고 다음 코드가 실행이 되어 발생하는 오류를 클래스의 싱글톤 방식으로 수정하여 해결하였습니다.
클라이언트에서 게임 시작을 보냈을 때 서버에서 인터벌 방식을 사용하여 DB에 저장된 스테이지 변경 시간에 맞추어 스테이지 변경을 실행하고
변경된 스테이지 정보를 클라이언트에 보내주어 정보를 갱신하도록 만들었지만,
이 역시 스테이지 시작과 마찬가지로 정보를 갱신하는 도중에 다음 코드가 실행이 되어 제대로 된 정보가 들어가지 않는 오류를 클래스의 싱글톤 방식으로 수정하여 해결하였습니다.
기존의 스켈레톤 코드에서는 기지에 몬스터가 도달할 시에 강제로 홈페이지가 다시 로딩되는 방식을 사용하였지만,
저희는 서버에서 몬스터가 생성될 때 몬스터의 수가 DB에 저장된 몬스터 한계 개체수에 도달하거나
최종 스테이지에 도달하여 나온 몬스터를 전부 다 잡는 경우에만 엔딩을 실행하도록 만들었고,
이를 작업하는 도중에 스테이지가 시작됨과 동시에 엔딩 조건 정보를 찾지 못하는 오류가 발생하였고
이를 해결하기 위하여 이벤트 방식으로 시작하던 몬스터 생성을 스테이지 시작에 종속시켜 이를 해결하였습니다.