과제를 받았을 때 어떻게 시작해야하는지 감이 오지 않았고 강의에서 배운 내용을 어떤식으로 활용해야하는지 갈피를 잡기 어려웠다.
그래서 시작조차 하지 못하고 있었다.
나 같은 사람이 많았던 탓인지 과제에 대한 접근 방법을 알려주는 특강이 있었다.
1. 과제의 요구사항을 vscode에 주석처리를 하여 쭉 적어본다.
2. 그 주석을 따라 class들을 먼저 생성해준다.
3. 세부사항을 채워나간다.
이를 따라 코드를 차근차근 작성해 보았다.
요구사항을 각각 주석처리를 한 후 순서대로 하나씩 진행해보니 전체적인 틀이 잡혔다.
내 코드
더보기
import random
class BaseCharacter:
def __init__(self, name, hp, normal_power):
self.name = name
self.max_hp = hp
self.current_hp = hp
self.normal_power = normal_power
def normal_attack(self, target):
damage = random.randint(int(self.normal_power*0.8), int(self.normal_power*1.2))
target.current_hp -= damage
print(f"{self.name}의 일반 공격! {target.name}에게 {damage}의 데미지를 입혔습니다.")
if target.current_hp <= 0:
print(f"{target.name}이(가) 쓰러졌습니다!")
else:
print(f"{target.name}의 남은 체력: {target.current_hp}")
def show_status(self):
print(f"{self.name}의 남은 체력은 {self.current_hp}입니다")
class Player(BaseCharacter):
def __init__(self, name, hp, mp, normal_power, magic_power):
super().__init__(name, hp, normal_power)
self.max_mp = mp
self.current_mp = mp
self.magic_power = magic_power
self.type_ = "인간"
def magic_attack(self, target):
damage = random.randint(int(self.magic_power*0.8), int(self.magic_power*1.2))
self.current_mp -= 10 # magic_attack 메소드가 10 MP소모
target.current_hp -= damage
print(f"{self.name}의 마법 공격! {target.name}에게 {damage}의 데미지를 입혔습니다.")
if target.current_hp <= 0:
print(f"{target.name}이(가) 쓰러졌습니다!")
else:
print(f"{target.name}의 남은 체력: {target.current_hp}")
class Monster(BaseCharacter):
def __init__(self, name, hp, normal_power):
super().__init__(name, hp, normal_power)
self.type_ = "몬스터"
# 플레이어로 부터 정보 입력받기
print("이름을 입력해 주세요: ")
name = str(input(" "))
player = Player(name, 100, 50, 20, 25)
monster = Monster("몬스터", 100, 20)
while True:
print("공격을 선택해주세요.")
print("1. 일반 공격")
print("2. 마법 공격")
action = input("입력: ")
if action == "1":
player.normal_attack(monster)
elif action == "2":
if player.current_mp < 10:
print("mp가 부족합니다.")
continue
player.magic_attack(monster)
else:
print("잘못된 입력입니다. 다시 선택해주세요.")
continue
if monster.current_hp <= 0:
print(f"{player.name}님이 승리했습니다.")
break
monster.normal_attack(player)
if player.current_hp <= 0:
print(f"{player.name}님이 패배했습니다.")
break
player.show_status()
정답코드
더보기
import random
class Character:
"""
모든 캐릭터의 모체가 되는 클래스
"""
def __init__(self, name, hp, power):
self.name = name
self.max_hp = hp
self.hp = hp
self.power = power
def attack(self, other):
damage = random.randint(self.power - 2, self.power + 2)
other.hp = max(other.hp - damage, 0)
print(f"{self.name}의 공격! {other.name}에게 {damage}의 데미지를 입혔습니다.")
if other.hp == 0:
print(f"{other.name}이(가) 쓰러졌습니다.")
def show_status(self):
print(f"{self.name}의 상태: HP {self.hp}/{self.max_hp}")
class Player(Character):
def __init__(self, name, hp, power, mana, magic_power):
super().__init__(name, hp, power)
self.max_mana = mana
self.mana = mana
self.magic_power = magic_power
def attack(self, other):
action = input("어떤 공격을 사용하시겠습니까? (1: 일반 공격, 2: 마법 공격) ")
if action == '1':
super().attack(other)
elif action == '2':
if self.mana < 10:
print("마나가 부족합니다.")
return
damage = self.magic_power
other.hp = max(other.hp - damage, 0)
self.mana = max(self.mana - 10, 0)
print(f"{self.name}의 마법 공격! {other.name}에게 {damage}의 데미지를 입혔습니다.")
if other.hp == 0:
print(f"{other.name}이(가) 쓰러졌습니다.")
else:
print("잘못된 입력입니다. 다시 입력해주세요.")
def show_status(self):
super().show_status()
print(f"마나 {self.mana}/{self.max_mana}")
class Monster(Character):
def __init__(self, name, hp, power):
super().__init__(name, hp, power)
def attack(self, other):
damage = random.randint(self.power - 2, self.power + 2)
other.hp = max(other.hp - damage, 0)
print(f"{self.name}의 공격! {other.name}에게 {damage}의 데미지를 입혔습니다.")
if other.hp == 0:
print(f"{other.name}이(가) 쓰러졌습니다.")
# 게임 시작
name = input("캐릭터의 이름을 입력하세요: ")
player = Player(name, 100, 10, 20, 20)
monster = Monster("슬라임", 50, 5)
while True:
player.show_status()
monster.show_status()
player.attack(monster)
if monster.hp == 0:
print("승리했습니다!")
break
monster.attack(player)
if player.hp == 0:
print("패배했습니다...")
break
'내일배움캠프' 카테고리의 다른 글
[TIL]Django 실무 기초 - 프로젝트 세팅 (0) | 2023.04.03 |
---|---|
[TIL]rpg게임 만들기 팀과제 (0) | 2023.04.03 |
[TIL]javascript 기초문법 (0) | 2023.03.15 |
[TIL]CSS 파일 분리 (0) | 2023.03.14 |
[TIL] Git과 Github (0) | 2023.03.14 |