해당 클래스 실습예제를 요약해보면 다음과 같다.
- 플레이어를 생성한다. 생성 시 닉네임, 미네랄, 가스를 입력받는다.
- 플레이어는 유닛을 생성할 수 있다. 유닛 생성은 produce() 메서드를 이용한다.
- 유닛 생성에 필요한 미네랄과 가스는 unit_info를 이용한다.
- 유닛을 생성한 미네랄과 가스만큼을 플레이어가 가지고 있는 미네랄과 가스에서 뺀다.
아래 클래스를 구현할 때 Unit(Player) 로 상속을 했었는데 다시 생각해보면 멍청한 짓이였다.
Player 속성은 Unit에겐 필요없는 속성이다. 즉, Player has-a Unit 관계이다.
# 유닛 정보
unit_info = {
"probe":{
"name":"프로브",
"mineral": 50,
"gas": 0,
"hp":20,
"shield": 20,
"demage": 5
},
"zealot":{
"name":"질럿",
"mineral": 100,
"gas": 0,
"hp":100,
"shield": 60,
"demage": 16
},
"dragon":{
"name":"드라군",
"mineral": 125,
"gas": 50,
"hp":100,
"shield": 80,
"demage": 20
}
}
# 유닛 클래스
class Unit:
'''
속성 : 이름, 체력, 방어막, 공격력
'''
def __init__(self, name, hp, shield, demage):
self.name = name
self.hp = hp
self.shield = shield
self.demage = demage
def __str__(self) :
return f"[{self.name}] 체력: {self.hp} 방어막: {self.shield} 공격력: {self.demage}"
# 플레이어 클래스
class Player:
'''
속성 : 닉네임, 미네랄, 가스
메서드 : 유닛 생산하기
'''
def __init__(self,nick_name,mineral,gas, unit_list = []):
self.nick_name =nick_name
self.mineral = mineral
self.gas = gas
self.unit_list = unit_list
def produce(self, name,mineral,gas,hp,shield,demage):
if self.mineral - mineral < 0:
print("미네랄이 부족합니다.")
elif self.gas - gas < 0:
print("가스가 부족합니다.")
else:
self.mineral -= mineral
self.gas -= gas
unit = Unit(name,hp,shield,demage)
self.unit_list.append(unit)
[Python] request 라이브러리 (0) | 2022.06.14 |
---|---|
[Python] 상속 (0) | 2022.06.14 |
[Python] map, filter 함수 (0) | 2022.06.11 |
[Python] 람다함수 (0) | 2022.06.10 |
[Python] 함수의 다양한 매개변수 (0) | 2022.06.10 |