본문 바로가기
카테고리 없음

2023-03-28~TIL 개인과제(Python)

by jung1911 2023. 3. 28.
내가 만든 코드 설명
# ~~~~~~~~플레이어 생성~~~~~~~~ #

import random

#Player 인스턴스 
class Player:
    def __init__(self, name, hp, mp, power, normal_attack, magic_power, magic_attack):
        self.name = name
        self.hp = hp
        self.mp = mp
        self.power = power
        self.normal_attack = normal_attack
        self.magic_power = magic_power
        self.magic_attack = magic_attack

#공격 타입을 정하기위해 while과 조건문을 사용해서 몬스터를 쓰러질때까지 공격하기위해 사용  
    def attack(self):
        print("어떤 공격을 사용하시겠습니까?")
        print("1. 일반공격")
        print("2. 마법공격")

        while True:
            attack_type = input("숫자를 입력하세요: ")
            if attack_type == "1":
                return "normal"
            elif attack_type == "2":
                return "magic"
            else:
                print("잘못된 입력입니다. 다시 입력해주세요.")

#input 아이디를 직접 생성하기 위해 만들었고 각각 스탯의 랜덤성을 부여해줬다
name = input("플레이어의 이름을 입력하세요: ")
hp = random.randint(50, 100)
mp = random.randint(20, 50)
power = random.randint(10, 20)
normal_attack = random.randint(1, 5)
magic_power = random.randint(5, 10)
magic_attack = random.randint(3, 10)

# class 상속 
player = Player(name, hp, mp, power, normal_attack, magic_power, magic_attack)

# 생성된 플레이어 객체의 정보 출력(개인적으로 깔끔하게 정리하고싶어서 print출력을 많이 만들었다.)
print(f"플레이어 이름: {player.name}")
print(f"체력: {player.hp}")
print(f"마력: {player.mp}")
print(f"파워: {player.power}")
print(f"기본공격: {player.normal_attack}")
print(f"마법파워: {player.magic_power}")
print(f"마법공격: {player.magic_attack}")

#Monster 인스턴스
class Monster:
    def __init__(self, name, hp, normal_attack,):
        self.name = name
        self.hp = hp
        self.normal_attack = normal_attack


# 몬스터 생성
name = "이세계_슬라임"
hp = random.randint(50, 100)
normal_attack = random.randint(1, 3)

#class 상속
monster = Monster(name, hp, normal_attack)

# 생성된 몬스터 정보
print(f"몬스터 이름: {monster.name}")
print(f"체력: {monster.hp}")
print(f"일반공격: {monster.normal_attack}")


#battle 함수에 Player Monster 함수를 넣어줬다.
def battle(player, monster):
    print("전투가 시작됩니다!")
# 현재 체력과 마나의 정보를 출력
    print(f"{player.name}: HP {player.hp}, MP {player.mp}")
    print(f"{monster.name}: HP {monster.hp}")

#플레이의 HP 몬스터의 HP가 0될때까지 while를 사용
    while player.hp > 0 and monster.hp > 0:
        # 플레이어의 공격
        attack_type = player.attack() #플레이어의 공격타입을 넣어줌
        if attack_type == "normal":
            damage = random.randint(player.power - 2, player.power + 2)
            monster.hp = max(monster.hp - damage, 0)
            print(f"{player.name}의 일반공격! {monster.name}에게 {damage}의 데미지를 입혔습니다.")
        else:
            if player.mp < 5:
                print("마나가 부족합니다. 일반공격을 사용하세요.")
                continue
            damage = random.randint(
                player.magic_power - 4, player.magic_power + 4)
            player.mp -= 5 #-= 현재 mp가 만약 40이다 40에서 5를빼고 남은 mp의 값을 보여주기위해 사용 35가출력
            monster.hp = max(monster.hp - damage, 0)
            print(f"{player.name}의 마법공격! {monster.name}에게 {damage}의 데미지를 입혔습니다.")

        if monster.hp == 0:
            print(f"{monster.name}이(가) 쓰러졌습니다.")
            print(f"{player.name}의 승리!")
            break(hp가 0이 되었기때문에 반복문에서 끝을 내주기 위해 break을 사용)

        # 몬스터의 공격
        damage = random.randint(monster.normal_attack - 2,
                                monster.normal_attack + 2)
        player.hp = max(player.hp - damage, 0)
        print(f"{monster.name}의 공격! {player.name}에게 {damage}의 데미지를 입혔습니다.")

        if player.hp == 0:
            print(f"{player.name}이(가) 쓰러졌습니다.")
            print(f"{player.name}의 패배!")
            break

        # 상태 출력
        print(f"{player.name}: HP {player.hp}, MP {player.mp}")
        print(f"{monster.name}: HP {monster.hp}")


battle(player, monster) #battle 의 함수값을 실행!

댓글