광주인력개발원

레전드오브복이 개발일지 14일차- 마지막날 - [2023-05-25]

플광 2023. 5. 31. 08:29

개발 일지


14일차 개발이다. 마지막 개발일이지만, 아직 미기능 구현들과 테스트들이 많이 남아 아침부터 쭉 계속 디버깅과 로직 구현에 힘을 쏟았다. 다행히 통합도 잘 진행중이고, 체력도 버텨주고 있어서 최종 발표까지 초집중에 집중을 유지할 수 있었다.

 

목표


 

(+) 수호대 개인 장비 벗기 안됨 : 먼저 클릭해야 벗을 수 있는 것은 아직 해결 불가

(+) 수호대에 따라 시작 위치 바뀌는 것

(+) 착용중인 아이템 못버리는 것

(+) 착용 중인 아이템임에도 다른 아이템 버리는 것

(+) 이동할 때 한번씩 비어있는 몬스터 주는 것

(+) 1번만 쓸 수 있는 스킬 카운트

(+) 치트 로직 by 윤재님

(-) 전투 밸런스 (시간 부족)

(-) 저장: 절반 완성 by 윤재님

 

 

 

개발 이슈


 

필드에서 안쓰는 아이템을 삭제하면 계속 착용중인 아이템이 삭제되고 있었다.

 

분명 착용중인 장비는 삭제하지 못하게 해두었는데, 그럼에도 계속 삭제되고 있었다.

 

print를 찍어봐도 parameter는 제대로 넘어오고 있었는데, some_list.remove(item) 을 하면 계속 다른 장비를 삭제하고 있었다.

 

원인은 내가 정렬을 위해 사용했던 매직메소드 때문이었다.

 

# in Item class
    def __eq__(self, other):
        if not isinstance(other, Item):
            return NotImplemented
        if self.item_name == other.item_name:
            return True
        return False
 
# in User class
    def delete_ever_item_inventory(self, item_: Item):
        if not isinstance(item_, Item):
            raise "아이템 객체가 들어와야합니다."
        if item_.item_meta_type == ItemData.equip:
            self.equip_inventory.remove(item_)
        elif item_.item_meta_type == ItemData.consume:
            self.consume_inventory.remove(item_)
        del item_
 

분명 착용 중인 아이템임에도 불구하고, 객체도 알맞게 잘 들어왔는데, __eq__에서 같다고 인식해버리니까

 

계속 다른 아이템이 삭제되어버리고 있었다.

 

   def delete_ever_item_inventory(self, item_: Item):
        if not isinstance(item_, Item):
            raise "아이템 객체가 들어와야합니다."
        if item_.is_occupied:
            raise "착용중인 아이템은 버릴 수 없습니다."
        if item_.item_meta_type == ItemData.equip:
            remove_to_index = None
            for idx, item in enumerate(self.equip_inventory):
                if id(item) == id(item_):
                    remove_to_index = idx
            self.equip_inventory.pop(remove_to_index)

        elif item_.item_meta_type == ItemData.consume:
            self.consume_inventory.remove(item_)
        with open("log.txt", 'a', encoding="utf-8") as file:
            file.write(f"[알림]{item_.item_name}을 버렸습니다. {item_.owner_guardian}")
        del item_
 

그리하여 생각한 해결책은 Id를 통해서 비교하도록 하였더니 의도대로 삭제되었다.

 

고민해보니, 실제로 아이템 클래스에서 __eq__를 오버라이드할 필요가 없으니

 

삭제하였고, 기존의 remove로도 정상 작동하기 시작했다. 매직메서드의 오버라이드는 앞으로 조심히 써야겠음을 느꼈다.

 

 

또 다른 버그 발생!

in monster class 객체 생성관련 static method

in gui class 위치 정보 갱신 관련 함수

어쩌다 한번씩 적의 리스트를 빈 상태로 받을 때도 있는데, 원인이 정확히 못찾고 있었다.

 

string으로 직접 값을 써주다보니깐, 이런 사소하지만 중대한 오류가 발생했다.

 

여지껏 필드 정보를 얼음이라 저장하고 있었는데... 여지껏 눈의 몬스터가 나오는걸 인지하지 못했다.

 

다행히 발견해서 키워드를 수정하니 몬스터가 잘 출현한다.

 

사실 이런 버그들이 찾기 어려워서 키워드로 사용할 단어들은 미리 사전협의하고 상수 클래스를 만들었어야했는데, 처음 팀개발이기도 하고, 모두들 바빠서 전혀 알아채지 못하고 있었다..

 

 

평가

오늘 오후부터서는 대다수의 기능이 완료되고 ui 업그레이드도 대폭 이루어졌다. css와 유사한 부분이 많아서 기능이나 인터렉션이 이전보다 훨씬 직관적이고 게임스러워졌다. 개발 직전까지 요구사항 반영하고 디버깅하느라 보고서 작성에는 거의 참여하지 못했다.

다행히 이를 맡아 대부분의 함수에 해석을 달아주신 팀장님과 함께 로직을 구현해준 윤재님에게 감사드립니다.

 

아쉬운점은 대부분의 기능을 제가 구현, 통합하게 되면서 다른 팀원들도 충분한 경험과 공부가 못되었을 것 같습니다. 또한 업무가 제게 과중되다보니 헬프도 정말 짬내어서만 할 수 있어서 필요한 도움을 적절히 주지 못한것 같아 미안합니다.

 

특별히 팀워크를 통해 좋았던 점은 확실히 혼자 할때보다 더 많은 일을 할 수 있었고, 의사소통이 많이 필요하구나 배우는 기회가 되었습니다.

 

내일은 그동안 작성했던 코드들을 스스로 리뷰해보는 시간을 가지며 sql공부도 해보겠습니다.

 

유명 잘하는 프로게이머들의 특징은 항상 자기의 플레이를 리뷰하고 다시 옳은 방향으로 셋팅하거나 다음번 게임에 트라이를 하더랍니다.

 

이럴때 시간내어 스스로 짠 코드와 행동들을 리뷰한다면 큰 성장을 할 수 있을 것 같습니다. 그러면서 다른 사람 코드도 보고.. 이번 기회에 참 여러모로 성장할 것 같네요.

 

모두 고생하셨습니다.!