인프런 커뮤니티 질문&답변

김상옥님의 프로필 이미지

작성한 질문수

파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자

스타크래프트 프로젝트 후반전

시즈모드 실행이 안됩니다.

작성

·

281

0

#탱크
class Tank(AttackUnit):
    #시즈모드 : 탱크를 고정시켜, 더 높은 파워로 공격 가능. 이동불가
    

    def __init__(self):
        AttackUnit.__init__(self"탱크"150135)
        self.seize_mode = False

    seize_developed = False #시즈모드 개발여부

    def set_seize_mode(self):
        if Tank.seize_developed == False:
            return
        
        # 현재 시즈모드가 아닐 때 -> 시즈모드
        if self.seize_mode == False:
            print("{} : 시즈모드로 전환합니다.".format(self.name))
            self.damage *= 2
            self.seize_mode = True

        # 현재 시즈모드일 떄 -> 시즈모드 해제
        else:
            print("{} : 시즈모드를 해제합니다.".format(self.name))
            self.damage /= 2
            self.seize_mode = False


#드랍쉽 : 공중유닛, 수송기, 마린/파이어뱃/탱크 등을 수송, 공격불가
class Flyable:
    def __init__(selfflying_speed):
        self.flying_speed = flying_speed

    def fly(selfnamelocation):
        print("{} : {} 방향으로 날아갑니다. [속도{}]".format(name, location, self.flying_speed))

#공중 공격 유닛 클래스
class FlyableAttackUnit(AttackUnitFlyable):
    def __init__(selfnamehpdamageflying_speed):
        AttackUnit.__init__(self, name, hp, 0, damage)
        Flyable.__init__(self, flying_speed)

    def move(selflocation):
        self.fly(self.name, location)

#레이스
class Wraith(FlyableAttackUnit):
    def __init__(self):
        FlyableAttackUnit.__init__(self"레이스"80205)
        self.clocked = False

    def clocking(self):
        if self.clocked == True:
            print("{} : 클로킹 모드 해제합니다.".format(self.name))
            self.clocked == False

        else:
            print("{} : 클로킹 모드 설정합니다.".format(self.name))
            self.clocked == True


def game_start():
    print("[알림] 새로운 게임을 시작합니다.")

def game_over():
    print("Player : gg")
    print("[Player] 님이 게임에서 퇴장하셨습니다.")


game_start()

m1 = Marine()
m2 = Marine()
m3 = Marine()

t1 = Tank()
t2 = Tank()

w1 = Wraith()

attack_units = []
attack_units.append(m1)
attack_units.append(m2)
attack_units.append(m3)
attack_units.append(t1)
attack_units.append(t2)
attack_units.append(w1)

#전군 이동
for unit in attack_units:
    unit.move("1시")

#탱크 시즈모드 개발
Tank.seize_developed = True
print("[알림] 탱크 시즈모드 개발이 완료되었습니다.")

#공격모드 준비 (마린 : 스팀팩 탱크 : 시즈모드, 레이스 : 클로킹)
for unit in attack_units:
    if isinstance(unit, Marine):
        unit.stimpack()
    elif isinstance(unit, Tank):
        unit.set_seize_mode
    elif isinstance(unit, Wraith):
        unit.clocking()

#전군 공격
for unit in attack_units:
    unit.attack("1시")

#전군 피해
for unit in attack_units:
    unit.damaged(randint(5,21))

# 게임 종료
game_over()
[알림] 새로운 게임을 시작합니다. 마린 유닛이 생성되었습니다. 마린 유닛이 생성되었습니다. 마린 유닛이 생성되었습니다. 탱크 유닛이 생성되었습니다. 탱크 유닛이 생성되었습니다. 레이스 유닛이 생성되었습니다. 마린 : 1시 방향으로 이동합니다. [속도 1] 마린 : 1시 방향으로 이동합니다. [속도 1] 마린 : 1시 방향으로 이동합니다. [속도 1] 탱크 : 1시 방향으로 이동합니다. [속도 1] 탱크 : 1시 방향으로 이동합니다. [속도 1] 레이스 : 1시 방향으로 날아갑니다. [속도5] [알림] 탱크 시즈모드 개발이 완료되었습니다. 마린 : 스팀팩을 사용합니다. (HP10 감소) 마린 : 스팀팩을 사용합니다. (HP10 감소) 마린 : 스팀팩을 사용합니다. (HP10 감소) 레이스 : 클로킹 모드 설정합니다. 마린 : 1시 방향으로 적군을 공격합니다. [공격력 5] 마린 : 1시 방향으로 적군을 공격합니다. [공격력 5] 마린 : 1시 방향으로 적군을 공격합니다. [공격력 5] 탱크 : 1시 방향으로 적군을 공격합니다. [공격력 35] 탱크 : 1시 방향으로 적군을 공격합니다. [공격력 35] 레이스 : 1시 방향으로 적군을 공격합니다. [공격력 20] 마린 : 5 데미지를 입었습니다. 마린 : 현재 체력은 25 입니다. 마린 : 12 데미지를 입었습니다. 마린 : 현재 체력은 18 입니다. 마린 : 11 데미지를 입었습니다. 마린 : 현재 체력은 19 입니다. 탱크 : 20 데미지를 입었습니다. 탱크 : 현재 체력은 130 입니다. 탱크 : 10 데미지를 입었습니다. 탱크 : 현재 체력은 140 입니다. 레이스 : 5 데미지를 입었습니다. 레이스 : 현재 체력은 75 입니다. Player : gg [Player] 님이 게임에서 퇴장하셨습니다.
똑같이 한것같은데 어디가 잘못되서 시즈모드가 안되는지
도저히 모르겠습니다 ㅠㅠ

답변 4

0

김상옥님의 프로필 이미지
김상옥
질문자

아.. 저걸 못봤네요! 잘 실행됩니다. 감사합니다!

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

아.. 시즈모드 개발이 아니라 시즈모드로 변환부분이 ㅎㅎ

set_seize_mode 뒤에 괄호 ( ) 가 빠졌네요 ^^ 붙이고 다시 해보세요

0

김상옥님의 프로필 이미지
김상옥
질문자

[알림] 새로운 게임을 시작합니다.

마린 유닛이 생성되었습니다.

마린 유닛이 생성되었습니다.

마린 유닛이 생성되었습니다.

탱크 유닛이 생성되었습니다.

탱크 유닛이 생성되었습니다.

레이스 유닛이 생성되었습니다.

마린 : 1시 방향으로 이동합니다. [속도 1]

마린 : 1시 방향으로 이동합니다. [속도 1]

마린 : 1시 방향으로 이동합니다. [속도 1]

탱크 : 1시 방향으로 이동합니다. [속도 1]

탱크 : 1시 방향으로 이동합니다. [속도 1]

레이스 : 1시 방향으로 날아갑니다. [속도5]

[알림] 탱크 시즈모드 개발이 완료되었습니다.

마린 : 스팀팩을 사용합니다. (HP10 감소)

마린 : 스팀팩을 사용합니다. (HP10 감소)

마린 : 스팀팩을 사용합니다. (HP10 감소)

레이스 : 클로킹 모드 설정합니다.

마린 : 1시 방향으로 적군을 공격합니다. [공격력 5]

마린 : 1시 방향으로 적군을 공격합니다. [공격력 5]

마린 : 1시 방향으로 적군을 공격합니다. [공격력 5]

탱크 : 1시 방향으로 적군을 공격합니다. [공격력 35]

탱크 : 1시 방향으로 적군을 공격합니다. [공격력 35]

레이스 : 1시 방향으로 적군을 공격합니다. [공격력 20]

마린 : 7 데미지를 입었습니다.

마린 : 현재 체력은 23 입니다.

마린 : 11 데미지를 입었습니다.

마린 : 현재 체력은 19 입니다.

마린 : 17 데미지를 입었습니다.

마린 : 현재 체력은 13 입니다.

탱크 : 9 데미지를 입었습니다.

탱크 : 현재 체력은 141 입니다.

탱크 : 13 데미지를 입었습니다.

탱크 : 현재 체력은 137 입니다.

레이스 : 14 데미지를 입었습니다.

레이스 : 현재 체력은 66 입니다.

Player : gg

[Player] 님이 게임에서 퇴장하셨습니다.

시즈모드만 화면에 출력이 안나옵니다.. 대체 왜이런지 썼던 문장들을 다시 읽어봐도 모르겠어요.. 

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

아래 [알림] 부분 내용을 살펴보니 프로그램 종료 부분까지 모두 출력이 잘 된듯한데요? 줄바꿈이 없어서 안 보이지만 스크롤을 옮기시면 보일 거에요 ^^