TO) 3주 2일

오늘 저는 개인 작업을 완료하고 기능을 추가했습니다.

오늘 찾은 기능
  • Python 명령 창 새로 고침: import os 호출 후 os.체계(“분명한”)두번째 다음을 통해 명령 창을 업데이트할 수 있습니다.
  • Python 출력의 텍스트 색상 변경: ANSI 이스케이프 코드를 사용하여 색상을 추가할 수 있습니다.
# 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”을 추가하면 색상을 지정할 수 있습니다. 이를 지정하는 방법에는 두 가지가 있습니다.

  1. print(‘\033(30m’ + ‘Hello’) 와 같은 것을 직접 지정하십시오.
  2. 위의 코드(Color.py)에서와 같이 Colors라는 클래스를 만들고 각 색상을 넣습니다. ANSI 이스케이프 코드를 저장합니다. 그런 다음 print(f'{Colors.RED}Hello’) 또는 print(‘Colors.RED’ + ‘Hello’) 처럼 사용할 수 있습니다. f-string으로 사용하는 것이 더 편리하기 때문에 이것을 사용할 것입니다.

추가하고 싶은 것

방어와 회복을 스킬에 넣고 싶었는데, 방어의 경우 방어에 성공하면 몬스터의 공격을 무효화하는 방식으로 하고 싶었습니다. 빼기의 한 형태이고, 회복 중에도 최대 체력을 넘지 않도록 하고 싶었다. 그래서 아래와 같이 코드를 작성했습니다.

#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() 함수의 데미지는 self.new_power를 획득하고 데미지를 0으로 주어야 합니다.
  • 본인.방어_성공 = 맞습니다: 수업 중 방어_성공 = false를 정의하고 self.defense <= 30이 true인 경우에만 True를 얻고, 나중에 메인 문에서 True이면 몬스터의 attack() 함수를 포함하지 마십시오.
  • self.recovery_item += -1 : 클래스로 recovery_item = 2로 정의되며 현재 HP가 max_hp를 초과하지 않는 경우에만 사용할 수 있습니다. 그리고 사용하다보면 하나씩 벗겨져 나갑니다.

문제의 일부
else:
   self.defense_success = False
   print(f"Failed to defend!")

방어를 위해 본인.방어_성공 = 잘못된 여기서는 받을 부분만 설정했는데 방어 성공 후 다시 방어 실패하게 만들지 않으면 defense_success는 True입니다.성공 만트라로 남아 있기 때문에 …

또한 체력 회복 중 오류가 발생하여 현재 체력이 max_hp를 초과하는 문제가 있었습니다.

해결
  • 방어의 경우 본문에서 유저-몬스터 순서로 공격이 끝나면 무조건 사용자.방어_성공 = 잘못된 를 사용하여 오류를 방지할 수 있었습니다.
  • 복구의 경우 hp > max_hp인 경우 hp = max_hp를 설정하여 오류를 수정할 수 있습니다.