Turn-Based Rpg Game 만들기

pjh_h·2021년 12월 23일
0

오늘은 턴제 Rpg game을 만들었다.

우선 클래스와 인스턴스의 개념이 부족한 나는 난이도가 쉬운 문제를 2개 풀면서 이해를 높이고 만들기로 하였다.

🎲 [Animal1]

  1. 클래스 생성을 해보았으며 생성자를 만들고 클래스를 상속시켜주었다.
  2. 간단하게 만들었다.
class animal():
    def __init__(self, name, kind):
        self.name = name
        self.kind = kind

class cat(animal):
    def howl(self):
        print('야옹')


class dog(animal):
    def howl(self):
        print('왈왈')

강아지 = cat('보리','강아지')
강아지.howl()

🎲 [Animal2]

  1. Animal1과 비슷하나 format을 사용해보았다.
  2. 역시 간단하게 만들었다.
class animal():
    def __init__(self, name, voice):
        self.name = name
        self.voice = voice

class cat(animal):
    def howl(self):
        print('{0}가 {1}하고 울었습니다'.format(self.name, self.voice))

class dog(animal):
    def howl(self):
        print('{0}가 {1}하고 울었습니다'.format(self.name, self.voice))

class cow(animal):
    def howl(self):
        print(f'{self.name}가 {self.voice}하고 울었습니다.')

🎲 [Animal3]

  1. Animal1,2와 비슷하다.
  2. 역시 간단하게 만들었다.
class Animal:
    def __init__(self,name):
        self.name = name

class Cat(Animal):
    def meow(self):
        return f'{self.name}은 왈왈왈'

class Dog(Animal):
    def bark(self):
        return f'{self.name}은 야옹'

dog1 = Dog('뽀삐')
print(dog1.bark())

🎲 [Rpg_Game]

  1. Object 클래스를 만들어서 상속받도록 해주었고 공격은 target을 설정하여 진행될 수 있게 하였다.
  2. 몬스터들은 딕셔너리 만들어서 관리하였다.
  3. 죽은 몬스터들은 딕셔너리의 키값으로 꺼내서 키값들만 모아 리스트에 저장하였다.
  4. 리스트에 저장된 죽은 몬스터들의 키값으로 딕셔너리 값들을 지움으로서 삭제했다.
  5. sleep()을 이용해 턴이 끝날때마다 텀을 주었다.
class Object:
    def __init__(self, name, hp, dmg):
        self.name = name
        self.hp = hp
        self.dmg = dmg

    def attack(self, target):
        print(f'{self.name}가 {target.name}을 엉덩이로 공격!')
        print(f'{target.name}가 {self.dmg}만큼 피해를 받았습니다!!')
        target.hp = target.hp - self.dmg
        if target.hp <= 0:
            print(f'{target.name}가 죽었습니다!!!')
        else:
            print(f'{target.name}의 체력이 {target.hp} 남았습니다.')
        return target.hp

class Player(Object):
    def magic(self,target):
        print(f'{self.name}가 {target.name}을 액션빔으로 공격!')
        print(f'{target.name}가 50만큼 피해를 받았습니다!!')
        target.hp = target.hp - 50
        if target.hp <= 0:
            print(f'{target.name}가 죽었습니다!!!')
        else:
            print(f'{target.name}의 체력이 {target.hp} 남았습니다.')
        return target.hp

class Monster(Object):
    def stay(self):
        print(f'{self.name}가 아무것도 하지않았습니다.')

    def cure(self):
        print(f'{self.name}가 체력을 10 회복하였습니다.')
        self.hp = self.hp + 10
        return self.hp

from random import choice
from time import sleep

def Character():
    Warrior = Player('짱구', 100, 10)
    Monsters = {}
    Monsters['철수'] = Monster('철수', 10, 10)
    Monsters['맹구'] = Monster('맹구', 30, 30)
    Monsters['훈이'] = Monster('훈이', 50, 50)
    return Warrior, Monsters

def Showinfo(Player, Monsters):
    print('\n---------------턴 시작---------------')
    print(f'{Player.name}의 체력: {Player.hp}')
    for key, value in Monsters.items():
        print(f'{value.name}의 체력: {value.hp}')

def Playerturn(Player, Monsters):
    print('\n---------------짱구 턴 시작---------------')
    target = input('누구를 공격하시겠습니까? : ')
    command = input('어떻게 공격하시겠습니까? 엉덩이? 액션빔? : ')
    if command == '엉덩이':
        Player.attack(Monsters[target])
    elif command == '액션빔':
        Player.magic(Monsters[target])
    return Monsters

def Check_mdead(Monsters):
    dead_monsters = []
    for key, value in Monsters.items():
        if value.hp <= 0:
            dead_monsters.append(key)

    for i in dead_monsters:
        del Monsters[i]
    if len(Monsters) <= 0:
        return Monsters, True
    else:
        return Monsters, False

def Monsterturn(Player, Monsters):
    print('\n---------------악당 턴 시작---------------')
    sleep(2)
    for key, value in Monsters.items():
        commands = ['cure','attack','stay']
        command = choice(commands)
        if command == 'cure':
            value.cure()
        elif command == 'attack':
            value.attack(Player)
        elif command == 'stay':
            value.stay()
    return Player

def Check_pdead(Player):
    if Player.hp <= 0:
        return True
    else:
        return False

Warrior, Monsters = Character()

while True:
    Showinfo(Warrior, Monsters)
    Playerturn(Warrior, Monsters)
    sleep(1)
    Monsters, ismdead = Check_mdead(Monsters)
    if ismdead:
        print('\n-----------떡잎유치원 대장은 나야!!!-----------')
        break
    Monsterturn(Warrior, Monsters)
    ispdead = Check_pdead(Warrior)
    if ispdead:
        print("\n-----------다시 시도해보아요!!!-----------!!!")
        break
    sleep(1)

Rpg_Game은 만드는데 시간데 오래 걸리고 개념을 이해하는데도 오래걸렸다.
해설코드도 많이 참고하고 구글링도 많이 해서 만들었다.
오늘의 마지막은 해설코드를 뜯어보고 이해하고 다시 구현해보는 것으로 마무리 지었다.

profile
까짓거 한번 해보죠

0개의 댓글