이 이야기는 슬픈이야기 입니다...
클래스, 상속, 데코레이터 공부를 하려고 강사님이 퀴즈를 내주셨으나...
코드 작성하다보니 조건문 공부만 하게된 이야기입니다... ㅎㄷㄷ
퀴즈는
# 스타크래프트
# - Marine : health(40), attack_pow(5), attack(상대체력감소)
# - Medic : health(60), heal_pow(6), heal(상대체력회복)
# 자유롭게 기능 추가
이렇게 마린과... 메딕을 간단히 구현해보는겁니다.
아래의 코드를 봅시다.
class Marine:
def __init__(self, health=40):
self.health = health
def attack(self, attack_pow=5):
print(f'상대체력을 {attack_pow}만큼 감소시킵니다.')
class Medic:
def __init__(self, health=50):
self.health = health
def heal(self, heal_pow=5):
print(f'마린체력을 {heal_pow}만큼 회복시킵니다.')
marine = Marine()
medic = Medic()
print(marine.health, medic.health)
marine.attack()
medic.heal()
이렇게 마린, 메딕 클래스를 선언하고...
marine, medic객체를 생성한 뒤
마린 메딕의 체력과 공격 메서드, 힐 메서드를 실행하면...
위 처럼 결과가 나옵니다.
근데 너무 빈약해 보여서... 상속이랑 데코레이터를 추가해서 공부하려고 시도를 했지만...
도저히 추가할 아이디어가 생각이 안나서...
적과 싸우는 모습을 구현해보기로 했습니다...
일단 적을 클래스로 만들면 큰일날것같아서...
딕셔너리로 아래와 같이 적을 만들었습니다!
enemy = {'health' : 30, 'attack_pow_enemy' : 9}
이렇게 아드레날린 저글링 마냥 체력적고 공격력쎈...놈을 만들었습니다.
그리고 적을 죽이고 메딕을 죽이고 마린을 죽이고...
적만 죽고, 마린만 죽고, 메딕만 죽고...
적과 마린이 같이죽고...
죽을때도 때리면서 죽고...
마린이 죽으면 메딕이 회복을 못시켜주고...
이런 기능들을 추가하니...
enemy = {'health' : 30, 'attack_pow_enemy' : 9}
class Marine:
def __init__(self, health=40):
self.health = health
def attack(self, attack_pow=5):
if (enemy['health'] > attack_pow) & (self.health > enemy['attack_pow_enemy']):
enemy['health'] -= attack_pow
self.health -= enemy['attack_pow_enemy'] #한대 칠때마다 한대 공격받음
print(f'상대체력이 {attack_pow}만큼 감소합니다.')
print('마린의 체력이', str(enemy['attack_pow_enemy']) + '만큼 감소합니다.')
elif (enemy['health'] > attack_pow) & ((self.health > 0) & (self.health <= enemy['attack_pow_enemy'])):
enemy['health'] -= attack_pow
self.health -= enemy['attack_pow_enemy'] #한대 칠때마다 한대 공격받음
print(f'상대체력이 {attack_pow}만큼 감소합니다.') #죽을 때도 때리고 죽음
self.health = 0
print('마린이 전사했습니다.')
elif (enemy['health'] > attack_pow) & (self.health == 0):
print('공격할 마린이 없습니다.')
elif ((enemy['health'] > 0) & (enemy['health'] <= attack_pow)) & (self.health > enemy['attack_pow_enemy']):
enemy['health'] = 0
print('상대방을 물리쳤습니다.')
self.health -= enemy['attack_pow_enemy'] #한대 칠때마다 한대 공격받음
print('마린의 체력이', str(enemy['attack_pow_enemy']) + '만큼 감소합니다.') #적도 죽을때 때리고 죽음
elif ((enemy['health'] > 0) & (enemy['health'] <= attack_pow)) & ((self.health > 0) & (self.health <= enemy['attack_pow_enemy'])):
enemy['health'] = 0
print('상대방을 물리쳤습니다.')
self.health = 0
print('마린이 전사했습니다.') #같이죽는 경우
elif ((enemy['health'] > 0) & (enemy['health'] <= attack_pow)) & (self.health == 0):
print('공격할 마린이 없습니다.')
elif (enemy['health'] == 0) & (self.health > enemy['attack_pow_enemy']):
print('공격할 적이 없습니다.')
elif (enemy['health'] == 0) & ((self.health > 0) & (self.health <= enemy['attack_pow_enemy'])):
print('공격할 적이 없습니다.')
else:
print('마린도 적도 없습니다.')
class Medic:
def __init__(self, health=50):
self.health = health
def heal(self, heal_pow=6):
if ((marine.health + heal_pow) >= 40) & (self.health > enemy['attack_pow_enemy']):
marine.health = 40
print('마린이 풀피입니다.')
self.health -= enemy['attack_pow_enemy'] # 회복 시도 1번당 1대 맞음
print('메딕의 체력이', str(enemy['attack_pow_enemy']) +'만큼 감소합니다.')
elif (marine.health > 0) & (self.health > enemy['attack_pow_enemy']):
marine.health += heal_pow
print(f'마린의 체력을 {heal_pow}만큼 회복합니다.')
self.health -= enemy['attack_pow_enemy'] # 회복 시도 1번당 1대 맞음
print('메딕의 체력이', str(enemy['attack_pow_enemy']) +'만큼 감소합니다.')
elif (marine.health == 0) & (self.health > enemy['attack_pow_enemy']):
print('회복할 마린이 없습니다.')
self.health -= enemy['attack_pow_enemy'] # 회복 시도 1번당 1대 맞음
print('메딕의 체력이', str(enemy['attack_pow_enemy']) +'만큼 감소합니다.')
elif ((marine.health + heal_pow) >= 40) & ((self.health > 0) & (self.health <= enemy['attack_pow_enemy'])):
marine.health = 40
print('마린이 풀피입니다.') # 죽을때도 회복하다 죽음
self.health = 0 # 메딕 사망
print('메딕이 전사했습니다.')
elif (marine.health > 0) & ((self.health > 0) & (self.health <= enemy['attack_pow_enemy'])):
print(f'마린의 체력을 {heal_pow}만큼 회복합니다.') # 죽을때도 회복하다 죽음
self.health = 0 # 메딕 사망
print('메딕이 전사했습니다.')
elif (marine.health == 0) & ((self.health > 0) & (self.health <= enemy['attack_pow_enemy'])):
print('회복할 마린이 없습니다.')
self.health = 0 # 회복 시도 1번당 1대 맞음
print('메딕의 전사했습니다.')
elif ((marine.health + heal_pow) >= 40) & (self.health == 0):
print('메딕이 죽고 없습니다.')
elif (marine.health > 0) & (self.health == 0):
print('메딕이 죽고 없습니다.')
else:
print('회복할 마린이 없습니다.')
print('메딕이 죽고 없습니다.')
marine = Marine()
medic = Medic()
이런 망할 코드가... 나왔습니다...
보기만해도 어질어질하네여...
암튼 코드를 만들었으니... 한 번 실행해 보기로 합시다...
이렇게 먼저 풀피 상태의 적, 마린, 메딕의 체력을 확인합니다.
enemy['health'], marine.health, medic.health
결과는...
잘 나오군요!
그럼 마린이 한번 공격 해봅시다(공격할 때 적한테 한대 맞음)
marine.attack()
enemy['health'], marine.health, medic.health
주고 받았군요...
마린을 죽여봅시다!
marine.attack()
marine.attack()
marine.attack()
marine.attack()
enemy['health'], marine.health, medic.health
위와 같이 4번 더 공격합니다..
그럼...
마린이 죽었군요...
죽은 상태에서 공격을 해봅시다...
marine.attack()
enemy['health'], marine.health, medic.health
결과는...?
마린은 죽고 없군요... 체력바는 그대로입니다...(마린이 죽으면 적이 메딕을 공격하는 것 까지는 무리였네여...)
그럼 마린이 죽은 상태에서 메딕이 힐을 해봅시다!
medic.heal()
enemy['health'], marine.health, medic.health
마린이 없어 회복 못하고, 회복시도를 해서 한대 맞은 모습입니다.
이제 적을 죽여봅시다.
다시 모두 풀피로 만들고...
힐 회복을 적당히 해서 적을 죽입니다.
marine.attack()
marine.attack()
medic.heal()
marine.attack()
medic.heal()
marine.attack()
medic.heal()
marine.attack()
marine.attack()
enemy['health'], marine.health, medic.health
실행결과를 과정으로 보면...
이렇게 피가 4 남고 죽였군요... 혈전이었네여...
이제 메딕을 죽여봅시다!
medic.heal()
medic.heal()
medic.heal()
medic.heal()
medic.heal()
medic.heal()
enemy['health'], marine.health, medic.health
이렇게 힐만 하다가...
힐만 하다가.... 죽은... 불쌍한 메딕... 입니다!
마지막으로 적과 마린이 동시에 죽는 일기토를 하게 실행해봅시다!
marine.attack()
marine.attack()
medic.heal()
marine.attack()
medic.heal()
marine.attack()
marine.attack()
marine.attack()
enemy['health'], marine.health, medic.health
이렇게 힐을 두번만 주고 나머지 어택을 때리면...
싸우다가 둘다 죽는... 슬픈 모습이네여...
오늘은 스타크래프트의 마린과 메딕으로 적과 싸우는 코드를 만들어봤네여...
저는 스타보단 롤이긴 해요... ㅋㅋㅋ
근데 수업을 듣고 나니 강사님이 원하는 방향은 아니었네여...
저는 그럼 이만...
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/006.gif)
'멋쟁이사자처럼 AI스쿨' 카테고리의 다른 글
메서드의 종류, 메서드 맹글링(파이썬 강의 Day5) (0) | 2023.01.06 |
---|---|
getter, setter, mangling(파이썬 강의 Day5) (2) | 2023.01.06 |
매출늘려버리기!(파이썬 강의 Day4) (0) | 2023.01.05 |
상속과 데코레이터(파이썬 강의 Day4) (0) | 2023.01.05 |
클래스(파이썬 강의 Day4) (0) | 2023.01.05 |
댓글