ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 기초6
    파이썬 2021. 7. 18. 17:27
    728x90

    파이썬 기초 6

    클래스(class)


    #마린: 공격 유닛, 군인. 총을 쏠 수 있음
    name = "마린" # 유닛의 이름
    hp = 40 #유닛의 체력
    damage = 5 #유닛의 공격력
    
    print("{0} 유닛이 생성되었습니다.".format(name))
    print("체력 {0}, 공격력 {1}\n".format(hp, damage))
    
    #탱크: 공격 유닛, 탱크, 포를 쏠 수 있는데, 일반 모드/ 시즈 모드
    tank_name = "탱크"
    tank_hp = 150
    tank_damage = 35
    
    print("{0} 유닛이 생성되었습니다.".format(tank_name))
    print("체력 {0}, 공격력 {1}\n".format(tank_hp, tank_damage))
    
    def attack(name, location, damage):
        print("{0}: {1} 방향으로 적군을 공격합니다. [공격력: {2}]".format(name, location, damage))
    
    attack(name, "1시", damage)
    attack(tank_name, "1시", tank_damage)
    
    ----------------------------------------------
    #// 위 내용을 class화
    class Unit:
        def __init__(self, name, hp, damage):
            self.name = name
            self.hp = hp
            self.damage = damage
            print("{0} 유닛이 생성 되었습니다".format(self.name))
            print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))
    
    marine = Unit("marine", 40, 5)
    marine2 = Unit("marine", 40, 5)
    tank = Unit("탱크", 150, 35)

    멤버 변수


    class Unit:
        def __init__(self, name, hp, damage):
            self.name = name
            self.hp = hp
            self.damage = damage
            print("{0} 유닛이 생성 되었습니다".format(self.name))
            print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))
    
    # marine = Unit("marine", 40, 5)
    # marine2 = Unit("marine", 40, 5)
    # tank = Unit("탱크", 150, 35)
    
    # 레이스: 공중 유닛, 비행기, 클로킹(상대방에게 보이지 않음)
    
    wraith1 = Unit("레이스", 80, 5)
    #외부에서 멤버변수 사용법
    print("유닛 이름: {0}, 공격력 : {1}".format(wraith1.name, wraith1.damage))
    
    
    # 마인드 컨트롤: 상대방 유닛을 내 거으로 만드는 것 (빼앗음)
    wraith2 = Unit(" 빼앗은 레이스", 80, 5)
    wraith2.clocking = True
    
    if wraith2. clocking == True:
        print("{0} 는 현재 클로킹 상태입니다.".format(wraith2.name))
    
        ##//객체에 추가로 변수를 외부에서 만들어 쓸 수 있음
        ##//wraith1에는 클로킹 X,확장한 변수는 확장시킨 객체에서만 사용 가능
    

    메서드(method)


    class AttackUnit:
        def __init__(self, name, hp, damage):
            self.name = name  #인자 받은 값은 멤버변수값에 넣어줌
            self.hp = hp
            self.damage = damage
            print("{0} 유닛이 생성 되었습니다".format(self.name))
            print("체력 {0}, 공격력 {1}".format(self.hp, self.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 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
            print("{0} 유닛이 생성 되었습니다".format(self.name))
            print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))
    

    다중상속


    #일반유닛
    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))
    
    
    #드랍쉽:공중 유닛, 수송기/ 공격기능은 없음
    #날 수 있는 기능을 가진 클라스
    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): #// AttackUnit과, Flyable의 요소들을 상속받음
        def __init__(self, name, hp, damage, flying_speed):
            AttackUnit.__init__(self, name, hp, damage)
            Flyable.__init__(self, flying_speed)
    
    #발키리 : 공중공격 유닛, 한번에 14발 미사일 발사
    valkyrie = FlyableAttackUnit("발키리", 200, 6, 5)
    valkyrie.fly(valkyrie.name, "3시")

    연산자 오버라이딩


    #일반유닛
    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, speed, damage):
            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,0 , damage) #//지상스피드는 들어갈 필요X
            Flyable.__init__(self, flying_speed)
    
        def move(self, location):     #//상속받았던 move를 재정의 해줌!!!!!!!
            print("[공중 유닛 이동]")
            self.fly(self.name, location)
    
    
    #벌처: 지상유닛, 기동성이 좋음
    vulture = AttackUnit("벌쳐", 80, 10, 20)
    
    #배틀크루저: 공중유닛 체력도 좋고 공격력도 좋음
    battlecruiser = FlyableAttackUnit("배틀크루저", 500, 25, 3)
    
    vulture.move("1시")
    battlecruiser.move( "1시")   #//오바라이딩 발생 , 반드시 move()를 재정의 해줘야한다.

    패스(pass)


    #건물 
    class BuildingUnit(Unit):
        def __init__(self, name, hp, location):
            pass    #//아무것도 안하고 그냥 넘어가줘!! 완성된 것처럼 보임
    
    #서플라이 디폿: 건물, 1개 건물 =8 유닛 생성가능,
    supply_depot = BuildingUnit("서플라이 디폿", 500, "7시")
    
    def game_start():
        print("[알림] 새로운 게임을 시작합니다." )
    
    def game_over():
        pass
    game_start()   #//새로운 게임을 시작합니다
    game_over()

    슈퍼(super)


    #건물 
    class BuildingUnit(Unit):
        def __init__(self, name, hp, location):
            # //Unit.__init__(self, name, hp, 0)
            super().__init__(name, hp, 0)      #//super 사용시 self를 작성하지 않는다. 윗줄이랑 결과 같음
            self.location = location     #//다중 상속시 super 사용불가, init을 통해 모두 초기화

    '파이썬' 카테고리의 다른 글

    파이썬 기초7,Quiz  (0) 2021.07.19
    파이썬 class_예제문제  (0) 2021.07.18
    파이썬 Day5  (0) 2021.07.17
    파이썬 Day4  (0) 2021.07.17
    파이썬 Day3  (0) 2021.07.17

    댓글

Designed by Tistory.