본문 바로가기

내일 배움 캠프/TIL

TIL) 3주차 2일

오늘은 개인 과제의 마무리 및 기능 추가를 했다.

 

오늘 알게된 기능들
  • 파이썬 명령창 새로고침 : import os를 불러온 후  os.system("clear")을 통해 명령창을 새로고침 할 수 있다 (bash 터미널에서 사용가능)
  • 파이썬 출력 글자색 변경 : ANSI escape code를 이용해 색을 넣을 수 있다. 
# Color.py
class Colors:
    BLACK = '\033[30m'
    RED = '\033[31m'
    GREEN = '\033[32m'
    YELLOW = '\033[33m'
    BLUE = '\033[34m'
    MAGENTA = '\033[35m'
    CYAN = '\033[36m'
    WHITE = '\033[37m'
    UNDERLINE = '\033[4m'
    RESET = '\033[0m'

    BRIGHT_BLACK = '\033[90m'
    BRIGHT_RED = '\033[91m'
    BRIGHT_GREEN = '\033[92m'
    BRIGHT_YELLOW = '\033[93m'
    BRIGHT_BLUE = '\033[94m'
    BRIGHT_MAGENTA = '\033[95m'
    BRIGHT_CYAN = '\033[96m'
    BRIGHT_WHITE = '\033[97m'
    BRIGHT_END = '\033[0m'

이처럼 "\033[" 뒤에  "숫자m"을 붙이면 색을 지정 해줄 수 있다. 이것을 지정해주는 방법은 2가지다. 

  1. print('\033[30m' + '안녕') 와 같이 바로 지정해 주는 것
  2. 위 코드(Color.py)처럼 Colors 라는 클래스를 만들어주고 그곳에 색깔별 ANSI escape code를 저장해준다. 그러면 이것을 통해 print(f'{Colors.RED}안녕') 또는 print('Colors.RED' + '안녕') 과 같이 사용 가능하다. 나는 f스트링으로 쓰는게 더 편하기 때문에 이것을 이용 할 것이다.

 

추가 해보고 싶은 부분

skill에  방어하기와 회복하기를 넣고 싶었는데, 방어하기 같은 경우엔 확률적으로 방어에 성공하면 몬스터의 공격을 무효화 하는 식으로 하고 싶었고, 회복하기 같은 경우엔  회복물약이 처음에 2개가 주어지고 쓸때마다 차감하는 형식이고 회복하더라도 자신의 최대 체력은 넘을 수 없게 하고 싶었다. 그래서 아래와 같이 코드를 만들어 보았다.

#def skill(self):
	    # 3. Defense
            elif set == '3':
                self.new_power = 0
                self.defense = random.randrange(1, 100)
                if self.defense <= 30:
                    self.defense_success = True
                    if self.hp < self.max_hp:
                        self.hp = max(self.hp + 25, 0)
                    if self.mp < self.max_mp:
                        self.mp = max(self.mp + 25, 0)
                    print(
                        f"Successful defense! HP recovers by 25 MP recovers by 25")
                else:
                    self.defense_success = False
                    print(f"Failed to defend!")
            # 4. HP Recovery
            elif set == '4':
                self.new_power = 0
                if self.recovery_item > 0:
                    if self.hp < self.max_hp:
                        self.recovery_item = self.recovery_item - 1
                        self.hp = max(self.hp + 50, 0)
                        print(f"HP recovers by 50 !")
                        if self.hp > self.max_hp:
                            self.hp = self.max_hp
                    else:
                        print(f"체력이 가득 차있습니다")
                        print("="*80)
                        return self.skill()
                else:
                    print(f"hp물약을 가지고 있지 않습니다")
                    print("="*80)
                    return self.skill()
                    
 # def attack(self, other):
 		damage = self.new_power
       		other.hp = max(other.hp - damage, 0)
            			...
  • self.new_power = 0 : 방어하기와 회복하기를 했을때 attack() 함수 속 damage가 self.new_power를 받아 0의 데미지를 주위 위함이다.
  • self.defense_success = True : 클래스에 defense_success = False 정의해주고 if self.defense <= 30 를 만족할 때만 True로 받게하여 뒤에 main문에서 True일때 몬스터의 attack() 함수를 넣지 않으면 된다. 
  • self.recovery_item += -1 : 클래스에 recovery_item = 2로 정의해주고 현재 hp가 max_hp를 넘지 않을때만 사용 가능하도록 했다. 그리고 사용하면 1개씩 차감이 되도록 하였다.

 

문제가 있었던 부분
else:
   self.defense_success = False
   print(f"Failed to defend!")

 

 

방어하기에서 self.defense_success = False 로 받게하는 부분을 이곳에만 넣었는데, 방어가 성공한후 다시한번 방어하기를 눌러 실패가 뜨게 하지 않으면  defense_success는 True로 남아있기 때문에 성공맨트가 뜨게됐다 ... 

또한 체력회복에서도 오류가 발생했는데, 현재체력이 max_hp을 넘게 되는 문제가 발생하였다.

 

 

해결방법
  • 방어하기 같은 경우엔 main문에서 유저-몬스터 순으로 공격이 끝났을때 무조건 user.defense_success = False 을 받게함으로써 오류를 막을 수 있었다.
  • 회복하기 같은 경우엔  hp > max_hp 일때 hp = max_hp 를 넣어줌으로써 오류를 해결 할 수 있었다.

 

 

 

'내일 배움 캠프 > TIL' 카테고리의 다른 글

TIL) 3주차 4일  (0) 2023.04.01
TIL) 3주차 3일  (0) 2023.03.29
TIL) 3주차 1일  (0) 2023.03.27
TIL) 2주차 5일  (2) 2023.03.24
TIL) 2주차 4일  (0) 2023.03.23