3주차에 접어들었다. 이번 주차에서는 터미널 턴 게임을 개인으로도 만들고, 팀 협업으로 고도화시키는 과제가 두개나 있었다. 확실히 이론만 배우는 것 보다 이런 식으로 직접 활용해보면서 어떤 때에 어떤 코드가 쓰일 지 감을 익힐 수 있었고 개념도 더 익숙해지는 것 같아서 좋았다.
운이 좋게 B-1조인 우리의 코드를 리뷰 받을 수 있었다. 내가 쓴 코드에 대한 피드백을 받은 부분을 개선해보았다. 레벨업함수랑 캐릭터를 생성하는 함수를 내가 맡았었는데, 코드에 대한 칭찬을 해주셔서 기뻤고 개선할 부분을 짚어주셔서 너무 좋았다. 코드리뷰를 받아보니 리뷰를 받지 않고 적당히 마무리 했을 때와 확연히 다른 느낌이었다.
def create_player():
# =============캐릭터 입력 값으로 객체 생성==========
while True:
player_name = input("플레이어 이름을 입력해주세요: ")
if player_name.strip():
break
else:
continue
while True:
player_career = input("""\n직업을 선택해주세요. (1~3)
1. 마법사 2. 전사 3. 도적
""")
if player_career != "1" and player_career != "2" and player_career != "3":
print("잘못된 입력입니다. 1~3 사이 숫자를 입력하세요")
else:
break
career_dict = {
"1": Magician(player_name),
"2": Knight(player_name),
"3": Thief(player_name)
}
career_list = {
"1": "마법사",
"2": "전사",
"3": "도적"
}
career_skill = {
"1": "메테오", # meteor
"2": "차원가르기", # demension_slicing
"3": "쌔비지 블로우" # savage_blow
}
player_obj = career_dict[player_career]
print(
f"""
***플레이어가 생성되었습니다!***
이름: {player_obj._name} / 직업: {career_list[player_career]}
HP: {player_obj._max_hp} / MP: {player_obj._max_mp}
특수스킬: {career_skill[player_career]}
""")
return player_obj
위 함수를 내가 대부분 작성했는데, 개선하면 좋을 것 같은 부분은
1) 직업 값을 입력받을 때의 예외처리 및 조건문 개선
2) 직업 딕셔너리에서 객체를 생성할 때 플레이어 입력값을 괄호 사용해서 바로 전달하도록 한 점
# 1번 개선예시 - player_obj 변수 초기화시 디폴트 None, if 조건문 사용
while True:
player_career = input("""\n직업을 선택해주세요. (1~3)
1. 마법사 2. 전사 3. 도적
""")
career_dict = {
"1": Magician,
"2": Knight,
"3": Thief
}
player_obj = career_dict.get(player_career, None)
if player_obj is None:
print("해당 직업이 존재하지 않습니다. 1~3 사이 숫자를 입력하세요")
continue
player_obj = player_obj(player_name)
break
# 2 번째 개선예시. try-except 활용하여 KeyError일 시 continue, 올바른 입력 값일 경우
# player_obj 변수에 입력 값 넣어서 객체 할당
while True:
player_career = input("""\n직업을 선택해주세요. (1~3)
1. 마법사 2. 전사 3. 도적
""")
try:
career_dict = {
"1": Magician,
"2": Knight,
"3": Thief
}
player_obj = career_dict[player_career](player_name)
except KeyError:
print("해당 직업이 존재하지 않습니다! 1~3 사이 숫자를 입력하세요")
continue
break
조건문도 세 개 이상의 조건이 들어가지 않고 한 눈에 볼 수 있다.
또한 딕셔너리에서 괄호를 사용해서 이름 입력값을 전달하였는데 먼저 전달하지 않고, 조건이 일치하면 입력값을 넣어 변수에 객체를 할당하도록 하였다. 개선을 하고보니, 내가봐도 한 눈에 들어오기 쉽고, 안정성, 확장성, 유지보수가 쉬울 것 같은 코드라는 걸 느꼈다.
def level_up(self):
level_up_info = 5
self._max_hp += level_up_info * 10
self._max_mp += level_up_info * 10
self._current_mp = self._max_mp # current_hp에 max_hp값 할당,체력회복
self._current_hp = self._max_hp
self._power += level_up_info * 2
self._exp += 0 # 경험치 초기화
self._level += 1 # 플레이어 레벨 상승
def level_up(self):
level_up_info = 5
self._max_hp += level_up_info * 10
self._max_mp += level_up_info * 10
self._current_mp = self._max_mp # current_hp에 max_hp값 할당,체력회복
self._current_hp = self._max_hp
self._power += level_up_info * 2
# 얻은 경험치가 exp_limit보다 많을 경우 누적 시켜줌
if self._exp > self._exp_limit:
self._exp = self._exp - self._exp_limit
else:
self._exp = 0
self._level += 1 # 플레이어 레벨 상승
또 내가 맡았던 레벨업 함수는 대체적으로 열심히 구현했지만, exp부분이 플레이어 입장에서 경험치가 누적되는 것이 더 좋을 것이라고 해주셨다.
얻은 경험치가 exp_limit보다 많을 경우에 if 조건을 걸어서 누적시켜주고 else인 경우는 0으로 초기화하여 개선했다.
다른 팀원분들이 쓰신 코드중에 내가 새로운 문법도 알게되고, 칭찬도 듣고, 개선점도 찾아서 나름 뿌듯했다.
새로 배운 문법 같은 부분은 예시들과 설명과 함께 따로 파이썬 카테고리에 업로드 중이다.
내일부터는 장고에 대해서 배울 예정이다. 화이팅
'내일배움캠프 > WIL' 카테고리의 다른 글
내일배움캠프 6주차 WIL (1) | 2023.04.24 |
---|---|
내일배움캠프 5주차 WIL (1) | 2023.04.17 |
내일배움캠프 4주차 WIL (2) | 2023.04.10 |
내일배움캠프 2주차 WIL (0) | 2023.03.27 |
내일배움캠프 1주차 (5) | 2023.03.17 |