Форум сайта python.su
Знаю некоторым из вас эта тема покажется странной но я прошу помочь в написании правильной структуры класса.
Сейчас тестирую механику для одной игры, все в бумажном виде кроме естественно логики игры её собрался писать на питоне для автоматизации процесса, нужно найти интересную систему боя но беда в том что так ее просто на бумаге не напишешь нужно тестировать убирать добавлять разные состояния боевой системы.
Суть в чем, для генерации персонажа делаю класс 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)
Офлайн
Не, мне кажется, так ты далеко не уедешь. Тут нужен подход “всё есть объект”. То есть как то так
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)
Офлайн