Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 11, 2014 23:26:53

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Посоветуйте как описать классы РПГ

Знаю некоторым из вас эта тема покажется странной но я прошу помочь в написании правильной структуры класса.
Сейчас тестирую механику для одной игры, все в бумажном виде кроме естественно логики игры её собрался писать на питоне для автоматизации процесса, нужно найти интересную систему боя но беда в том что так ее просто на бумаге не напишешь нужно тестировать убирать добавлять разные состояния боевой системы.
Суть в чем, для генерации персонажа делаю класс CharacterRPG в этом классе создается характеристики персонажа его имя и дополнительные способности типа магии и приемов которыми он может владеть в дальнейшем каждый обьект персонажа будет использоваться в просчетах попал не попал сколько жизней осталось какой статус (просто на бумаге это делать муторно).
Не могу определиться как описать класс магии и вообще делать ли мне под магию отдельный класс или можно записать все просто словарями да и не парить себе мозги с класcами.
Сейчас есть вот такой класс:

class CharacterRPG():
    import random
    def __init__(self, Race='', name='Test1', HP=100, MP=0, Str=0, Agi=0, Int=0, Ros=170, magic={}):
        self.Race = Race
        self.name = name
        self.HP = HP
        self.MP = MP
        self.Str = Str
        self.Agi = Agi
        self.Int = Int
        self.Ros = Ros
        self.Magic = magic
        self.RacesList = {
            'Человек': {'Str': 5, 'Agi': 5, 'Int': 5},
            'Демон': {'Str': 8, 'Agi': 4, 'Int': 3},
            'Эльф': {'Str': 3, 'Agi': 7, 'Int': 5},
            'Гном': {'Str': 6, 'Agi': 2, 'Int': 7}
        }
        self.FerstBlist = {
            'Сильный': {'Str': 1, 'Agi': -1, 'Int': 0},
            'Слабый': {'Str': -1, 'Agi': 1, 'Int': 0},
            'Умный': {'Str': -1, 'Agi': -1, 'Int': 2},
            'Глупый': {'Str': 2, 'Agi': 0, 'Int': -2},
            'Удивительный': {'Str': -2, 'Agi': 1, 'Int': 1}
        }
        self.MagikList = {
            'Черная магия': {'Bonus': 20},
            'Белая магия': {'Bonus': 20},
            'Природная магия': {'Bonus': 10},
            'Водная магия': {'Bonus': 20},
            'Огненная магия': {'Bonus': 20}
        }
        self.SecondBlist = {
            'Простак': {
                'magic': {
                    'Белая магия': self.MagikList['Белая магия'],
                    'Белая магия': self.MagikList['Белая магия']}
            },
            'Южанин': {'magic': {'Черная магия': self.MagikList['Черная магия']}},
            'Северянин': {'HP': 15, 'magic': {'Водная магия': self.MagikList['Водная магия']}},
            'Городской': {'magic': {'Огненная магия': self.MagikList['Огненная магия']}},
            'Деревенский': {'magic': {'Природная магия': self.MagikList['Природная магия']}}
        }
    def get_race(self):
        race = random.choice([x for x in self.RacesList])
        ferstbonus = random.choice([x for x in self.FerstBlist])
        secondbonus = random.choice([x for x in self.SecondBlist])
        self.name = '{sec} {fer} {rac}'.format(sec=secondbonus,fer=ferstbonus,rac=race)
        return race, self.RacesList[race],self.FerstBlist[ferstbonus],self.SecondBlist[secondbonus]
    def generate_main_stat(self):
        new_race, stat, ferst, second = self.get_race()
        self.Race = new_race
        self.Str = stat['Str'] + ferst['Str']
        self.Agi = stat['Agi'] + ferst['Agi']
        self.Int = stat['Int'] + ferst['Int']
    def generate_name(self, race):
        sklonnost = ["Хороший", "Злой", "Плохой", "Удивленный", "Пушистый", "Глупый", "Умный"]
        dostij = ["Славный", "Великий", "Простой", "Маленький", "Грязный"]
        self.name = "{dostij} {sklonnost} {nacii}".format(nacii=race,
                                                          sklonnost=random.choice(sklonnost),
                                                          dostij=random.choice(dostij))
    def chose_magek(self):
        lists = random.choice([x for x in self.MagikList])
        return {lists: self.MagikList[lists]}
    def generate_ros(self):
        if random.randint(0, 1) == 0:
            self.Ros = self.Ros + random.randint(0, 30)
        else:
            self.Ros = self.Ros - random.randint(0, 30)
    def generate_hp_bonus(self):
        v = []
        if self.Ros == 170:
            self.HP == self.HP
        elif self.Ros > 170:
            a = self.Ros - 170
            for l in xrange(1, a, 3):
                v.append(l)
            self.HP = self.HP + ((len(v) * 3) + a)
        else:
            a = self.Ros - 170
            for l in xrange(1, a, 3):
                v.append(l)
            self.HP = self.HP + ((-len(v) * 3) + a)
    def generate_agi_bonus(self):
        if self.Ros == 170:
            self.Agi == self.Agi
        elif self.Ros > 170:
            print "1", self.Agi
            print self.Ros
            self.Agi = self.Agi + (-(self.Ros - 170) / 4)
        else:
            print "2", self.Agi
            print self.Ros
            self.Agi = self.Agi + ((self.Ros - 170) / 4)
    def generate_stat(self):
        self.generate_main_stat()
        self.generate_ros()
        # self.generate_hp_bonus()
        # self.generate_agi_bonus()
    def render_print(self):
        return "Race: {race} Name: {name} Str: {str} Agi: {agi} Int: {int}".format(race=self.Race, name=self.name,
                                                                                   str=self.Str, agi=self.Agi,
                                                                                   int=self.Int)

у него есть переменная self.SecondBlist это последний бонус который дописывается к имени персонажа и должен давать ему школу магии к которой принадлежит перс, под переменную магии я создаю словрик но когда пытаюсь туда засунуть еще один словарь с магиями происходит ошибка )) я думаю может магию сделать класcом и структурировать магию по средствам этого класса ? но тогда как описать этот клаcс если если в нем должно быть школа маги в каждой школе должно быть по три магии и у каждой магии должен быть параметр урона ))
Что мне делать как мне быть !?
Помогите дорогие друзья за то что прочитали эту порцию информации =)



Офлайн

#2 Сен. 12, 2014 06:26:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Посоветуйте как описать классы РПГ

Не, мне кажется, так ты далеко не уедешь. Тут нужен подход “всё есть объект”. То есть как то так

class BaseRace(object):
    name = u""
    strength = 10
    intellect = 10
    health = 10
    EXTRA_DAMAGE = 1
    @classmethod
    def get_damage(cls, health, damage):
        return health - damage * cls.EXTRA_DAMAGE
class Human(BaseRace):
    name = u"Human"
    health = 7
    intellect = 13
    EXTRA_DAMAGE = 1.2
class Troll(BaseRace):
    name = u"Troll"
    health = 13
    intellect = 7
    EXTRA_DAMAGE = 0.9
races = BaseRace.__subclasses__()
class BasePerson(object):
    max_level = 1
    level_exp = [100, 200, 400, 800, 1200, 1600]
    def __init__(self, race_class=None, **kwargs):
        self.race = race_class
        if self.race is None:
            self.race = random.choice(races)
        self.health = self.race.health
        self.strength = self.race.strength
        self.intellect = self.race.intellect
        self.is_alive = True
        self.level = 0
        self.experience = 0
        for k, v in kwargs.iteritems():
            setattr(self, k, v)
    def get_damage(self, damage):
        self.health = self.race.get_damage(self.health, damage)
        if self.health < 0:
            self.is_alive = False
    def get_experience(self, exp):
        if self.level < self.max_level:
            self.experience += exp
        for e in self.level_exp[self.level+1:]:
            if self.experience > e:
                self.level_up()
    def level_up(self):
        pass
class Person(BasePerson):
    max_level = 50
class NPC(BasePerson):
    max_level = 5



Отредактировано FishHook (Сен. 12, 2014 06:27:21)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version