ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 class_예제문제
    파이썬 2021. 7. 18. 22:18
    728x90

    파이썬 class_예제문제


    스타크래프트 class


    from random import * #//랜덤화를 위한 라이브러리 호출
    
    #일반유닛
    class Unit:
        def __init__(self, name, hp, speed):
            self.name = name
            self.hp = hp
            self.speed = speed
            print("{0} 유닛이 생성 되었습니다".format(name))
    
        def move(self, location):
    
            print("{0} : {1}방향으로 이동합니다. [속도: {2}]".format(self.name, location,self.speed))
    
            #//데미지 메서드
        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 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))
    
    class Marine(AttackUnit):
        def __init__(self):
            AttackUnit.__init__(self,"마린", 40, 1, 5)
    
        #스팀팩 기능 -일정 시간동안 이동 및 공격 속도를 증가,체력 10 감소
        def stimpack(self): 
            if self.hp > 10:
                self.hp -= 10
                print("{0}:스팀팩을 사용합니다. (HP 10 감소)".format(self.name))
            else:
                print("{0}: 체력이 부족하여 스팀팩을 사용하지 않습니다.".format(self.name))
    
    class Tank(AttackUnit):
        #시즈모드: 탱크를 지상에 고정시켜, 더 높은 파워로 공격하는 기능, 이동 불가
        seize_developed = False # 시즈모드 개발 여부    
    
    
        def __init__(self):
              AttackUnit.__init__(self, "탱크", 150, 1, 35)
              self.seize_mode = False
    
        def set_seize_mode(self):
            if Tank.seize_developed == False:
                return
    
            #현재 시즈모드가 아닐때 =>시즈모드 
            if self.seize_mode ==False:
                print("{0} : 시즈모드로 전환합니다.".format(self.name))
                self.damage *= 2
                self.seize_mode = True
    
            #현재 시즈모드 일때 -> 시즈모드 해제
            else:
                print("{0} : 시즈모드로 해제합니다.".format(self.name))
                self.damage /= 2
                self.seize_mode = False
    
    
    
    #드랍쉽:공중 유닛, 수송기/ 공격기능은 없음
    #날 수 있는 기능을 가진 클라스
    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를 재정의 해줌!!!!!!!
    
            self.fly(self.name, location)
    
    class Wraith(FlyableAttackUnit):
    
    
        def __init__(self):
            FlyableAttackUnit.__init__(self, "레이스", 80, 20, 5)    
            self.clocked = False #클로킹 모드(해제 상태)
    
        def clocking(self):
            if self.clocked == True:
                print("{0}: 클로킹 모드 해제합니다".format(self.name))
                self.clocked = False
            else:
                print("{0}: 클로킹 모드 설정합니다".format(self.name))
                self.clocked = True
    
    def game_start():
        print("[알림] 새로운 게임을 시작합니다.")
    
    def game_over():
        print("Player : gg")
        print("[Player] 님이 게임에서 퇴장했습니다.")
    
    ####실제 게임 진행
    game_start()
    
    #마린 3기 생성
    m1 = Marine()
    m2 = Marine()
    m3 = Marine()
    
    #탱크 3기 생성
    t1 = Tank()
    t2 = Tank()
    
    #레이스 1기 생성
    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]
    [알림] 시즈모드 개발이 완료되었습니다.
    마린:스팀팩을 사용합니다. (HP 10 감소)
    마린:스팀팩을 사용합니다. (HP 10 감소)
    마린:스팀팩을 사용합니다. (HP 10 감소)
    탱크 : 시즈모드로 전환합니다.
    탱크 : 시즈모드로 전환합니다.
    레이스: 클로킹 모드 설정합니다
    마린 : 1시방향으로 적군을 공격합니다. [공격력 5]
    마린 : 1시방향으로 적군을 공격합니다. [공격력 5]
    마린 : 1시방향으로 적군을 공격합니다. [공격력 5]
    탱크 : 1시방향으로 적군을 공격합니다. [공격력 70]
    탱크 : 1시방향으로 적군을 공격합니다. [공격력 70]
    레이스 : 1시방향으로 적군을 공격합니다. [공격력 20]
    마린 : 11 데미지를 입었습니다.
    마린: 현재 체력은 19입니다.
    마린 : 18 데미지를 입었습니다.
    마린: 현재 체력은 12입니다.
    마린 : 17 데미지를 입었습니다.
    마린: 현재 체력은 13입니다.
    탱크 : 16 데미지를 입었습니다.
    탱크: 현재 체력은 134입니다.
    탱크 : 9 데미지를 입었습니다.
    탱크: 현재 체력은 141입니다.
    레이스 : 14 데미지를 입었습니다.
    레이스: 현재 체력은 66입니다.
    Player : gg
    [Player] 님이 게임에서 퇴장했습니다.
    '''

    클래스 부동산 퀴즈(QUIZ)


    # Quiz) 주어진 코드를 활용하여 부동산 프로그램을 작성하시오
    '''
    (출력 예제)
    총 3대의 매물이 있습니다.
    강남 아파트 매매 10억 2010년
    마포 오피스텔 전세 5억 2007년
    송파 빌라 월세 500/50 2000년
    '''
    
    # [코드]
    class House:
        #매물 초기화
        def __init__(self, location, house_type, deal_type, price, completion_year):
            self.location = location
            self.house_type = house_type
            self.deal_type = deal_type
            self.price = price
            self.completion_year = completion_year
    
        def show_detail(self):
            print(self. location, self.house_type, self.deal_type\
                , self.price, self.completion_year)
    
    
    houses = []
    house1 = House("강남", "아파트", "매매", "10억", "2010년")
    house2 = House("마포", "오피스텔", "전세", "5억", "2007년")
    house3 = House("송파", "빌라", "월세", "500/50억", "2000년")
    
    houses.append(house1)
    houses.append(house2)
    houses.append(house3)
    print(houses)
    print("총 {0}대의 매물이 있습니다.".format(len(houses)))
    for house in houses:
        house.show_detail()

    *youtube 나도코딩 참고

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

    [python] Regular Expression(정규표현식) #Step1  (0) 2021.10.23
    파이썬 기초7,Quiz  (0) 2021.07.19
    파이썬 기초6  (0) 2021.07.18
    파이썬 Day5  (0) 2021.07.17
    파이썬 Day4  (0) 2021.07.17

    댓글

Designed by Tistory.