게임 소개
- 세 종족 사이에 전쟁을 그린 게임입니다.
- 유닛을 최대한 빠르게 많이 만들어 적을 궤멸시키는 게임입니다.
- 종족은 보병, 탱크, 전투기 와 같은 유닛을 생성합니다.
- 공격유닛과 공격할수 없는 유닛이 있습니다.
- 의무병이 공격할수 없는 유닛에 해당 합니다.
상속
- 클래스의 내용을 다른 클래스가 물려받아 사용하는 것을 뜻합니다.
- 클래스에 공통되는 부분을 중복으로 작성하지 않고 재사용할수 있습니다.
- 아래 코드는 9장의 유닛과 공격 유닛 코드를 수정한 것입니다.
class Unit:
def __init__(self, name, hp):
self.name = name
self.hp = hp
class AttackUnit(Unit):
def __init__(self, name, hp, damage):
Unit.__init__(self, name, hp)
self.damage = damage
def attack(self, location):
print("{0} : {1} 방향 적군을 공격합니다. [공격력 {2}]".format(self.name, location, self.damage))
def damaged(self, damage):
print("{0} : {1}만큼 피해를 입었습니다.".format(self.name, damage))
self.hp -= damage
print("{0} : 현재 체력은 {1}입니다.".format(self.name, self.hp))
if self.hp <= 0:
print("{0} : 파괴됐습니다.".format(self.name))
다중 상속
- 한 클래스가 두개 이상의 다른 클래스로부터 상속을 받는것을 의미합니다.
- 형태는 아래 1번과 같습니다.
- 지상 유닛을 다른 위치로 수송하면서 공격력이 없는 수송선같은 유닛을 만들어주겠습니다.
1번)
class 자식 클래스(부모 클래스1, 부모 클래스2,..):
2번)
class Flyable:
def __init__(self, flying_speed):
self.flying_speed = flying_speed
def fly(self, name, location):
print("{0} : {1} 방향으로 날아갑니다. [속도 {2}]".format(name, location, self.flying_speed))
class FlyableAttackUnit(AttackUnit, Flyable):
def __init__(self, name, hp, damage, flying_speed):
AttackUnit.__init__(self, name, hp, damage)
Flyable.__init__(self, flying_speed)
메소드 오버라이딩
- 상속관계일때 자식 클래스에서 부모 클래스에 정의한 메서드를 그대로 사용하지 않고
같은 이름으로 메서드를 새롭게 정의해 사용하는 방법입니다.
pass
- 아무것도 하지 않고 그냥 넘어간다는 의미로 사용합니다.
super()
- 클래스에 이름을 적지 않고 부모 클래스에 접근할수 있습니다.
- 상속하는 부모 클래스의 메서드를 사용할때 필요합니다.
게임만들기
- 이동 동작을 나타내는 move() 메서드를 정의하겠습니다.
- 지상유닛에 기동성이 좋은 호버 바이크와 공중유닛에 체력과 공격력이 좋은 우주 순양함을 만들어주겠습니다.
- 유닛이 많아 개별적으로 관리가 어려우므로 move() 메서드를 오버라이딩해서
재정의 한 메서드에서 fly()를 호출하도록 바꾸겠습니다.
class Unit:
def __init__(self, name, hp, speed):
self.name = name
self.hp = hp
self.speed = speed
def move(self, location):
print("[지상 유닛 이동]")
print("{0} : {1} 방향으로 이동합니다. [속도 {2}]".format(self.name, location, self.speed))
class AttackUnit(Unit):
def __init__(self, name, hp, damage, speed):
Unit.__init__(self, name, hp, speed)
self.damage = damage
def attack(self, location):
print("{0} : {1} 방향 적군을 공격합니다. [공격력 {2}]".format(self.name, location, self.damage))
def damaged(self, damage):
print("{0} : {1}만큼 피해를 입었습니다.".format(self.name, damage))
self.hp -= damage
print("{0} : 현재 체력은 {1}입니다.".format(self.name, self.hp))
if self.hp <= 0:
print("{0} : 파괴됐습니다.".format(self.name))
class Flyable:
def __init__(self, flying_speed):
self.flying_speed = flying_speed
def fly(self, name, location):
print("{0} : {1} 방향으로 날아갑니다. [속도 {2}]".format(name, location, self.flying_speed))
class FlyableAttackUnit(AttackUnit, Flyable):
def __init__(self, name, hp, damage, flying_speed):
AttackUnit.__init__(self, name, hp, damage, 0)
Flyable.__init__(self, flying_speed)
def move(self, location):
print("[공중 유닛 이동]")
self.fly(self.name, location)
'학습단 > Python 학습단' 카테고리의 다른 글
9-3장(게임 만들기3) (0) | 2023.07.24 |
---|---|
3주차 완료입니다. (0) | 2023.07.21 |
9장 클래스(게임 만들기) (0) | 2023.07.20 |
8-2장 파일 입출력 (0) | 2023.07.19 |
8장 입출력 (0) | 2023.07.18 |