Нужна помощь в программировании с несколькими файлами на Python - PullRequest
2 голосов
/ 15 декабря 2011

Я делаю RPG и пытаюсь разбить вещи на несколько файлов, чтобы упорядочить вещи. (Я имею в виду, что создание одного персонажа занимало более 2000 строк.) Но это то, чего я никогда не делал, и я действительно не уверен, как это сделать. Так что, если бы я мог получить некоторые общие советы о том, как все настроить эффективно и т. Д., Я был бы очень признателен. Я действительно не смог найти много по этой теме, кроме страницы о модулях на сайте python, которую я прочитал, но я все еще немного неясен по этому поводу. Это определенно самая запутанная, наименее обсуждаемая вещь, с которой я когда-либо сталкивался в программировании ... и я очень не хочу задавать смутные вопросы, подобные этим, но я определенно не добиваюсь никакого прогресса самостоятельно, поэтому я ' Я надеюсь, что один из вас может поставить меня на правильный путь.

Я также приведу один конкретный пример.

Я хочу поместить все характеристики и навыки персонажа в один или два списка, чтобы мне было проще использовать их с функциями, и я понятия не имею, как использовать список из другого файла в качестве аргумента для функция. Это то, что я пробовал, и похоже, что это должно работать. Я импортирую этот файл в CharacterCreation, а затем просто использую «StatCalculations.LevelUp (PLAYERSTATLIST)», но в нем говорится, что «модуль» не имеет атрибута «LevelUp».

Что я делаю не так?

from CharacterCreation import BaseHEALTH, BaseMANA, BaseSTAMINA, BaseCAPACITY, BaseDEFENSE, STRENGTH, ENDURANCE, AGILITY, INTELLIGENCE, PERSONALITY, BaseSTRENGTH, BaseENDURANCE, BaseAGILITY, BaseINTELLIGENCE, BasePERSONALITY, PLAYERLEVEL, PLAYERNAME

def LevelUp(*PLAYERSTATLIST):
    HEALTH = BaseHEALTH + ( ENDURANCE / 2 ) + ( STRENGTH / 5 )
    MANA = BaseMANA + INTELLIGENCE + ( ENDURANCE / 10 )
    STAMINA = BaseSTAMINA + ( STRENGTH / 5 ) + ( ENDURANCE / 5 )
    CAPACITY = BaseCAPACITY + ( STRENGTH / 5 ) + ( ENDURANCE / 10 )
    DEFENSE = BaseDEFENSE + ( ENDURANCE / 10 ) + ( AGILITY / 10 ) + ( STRENGTH / 10 )
    PLAYERSTATLIST = [HEALTH, MANA, STAMINA, CAPACITY, DEFENSE, BaseHEALTH, BaseMANA, BaseSTAMINA, BaseCAPACITY, BaseDEFENSE, STRENGTH, ENDURANCE, AGILITY, INTELLIGENCE, PERSONALITY, BaseSTRENGTH, BaseENDURANCE, BaseAGILITY, BaseINTELLIGENCE, BasePERSONALITY, PLAYERLEVEL, PLAYERNAME]
return PLAYERSTATLIST

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Вот небольшой пример, чтобы вы могли начать .. Вы можете инициализировать базовые значения с помощью чего-то вроде randrange и так далее. каждый из этих классов может быть помещен в файл и импортирован как модуль, независимо от того, как вы организованы. удачи

import random

class PlayerAttributes(object):

    def __init__(self):
        self.health      = 0
        self.mana        = 0
        self.stamina     = 0
        self.capacity    = 0
        self.defense     = 0
        self.reset_attributes()

    def level_up(self):
        self.level_health()
        self.level_mana()
        #etc

    def reset_attributes(self):
        self.reset_health()
        self.reset_mana()
        self.reset_stamina()
        self.reset_capacity()
        self.reset_defense()

    def get_health(self):
        return self.health

    def reset_health(self):
        self.health = base_health

    def level_health(self):
        self.health += (self.endurance/2) + (self.strength/2)


class Equipment(object):

    def __init__(self):
        self.equipment_dict     = {}
        self.currently_equipped = None

    def set_equipped_weapon(self,weapon_name)
        self.currently_equipped = weapon_name

    def add_item(self,item):
        self.equipment_dict[item.name] = item

class Item(object):

    def __init__(self,name,hp,attack,defense,weight):
        pass #put stuff in here, etc


class Player(object):

    def __init__(self):
        self.attributes = PlayerAttributes()
        self.backpack   = Equipment()
        self.backpack.add_item(Item("dagger",5,10,0,2))

    def level_up(self):
        self.attributes.level_up()
0 голосов
/ 15 декабря 2011

Так что, если бы я мог получить некоторые общие советы о том, как все настроить и т. Д.

Шаг 1. Прочитайте библиотеки Python. Выберите дюжину или около того, которые "связаны". Если вы посмотрите на раздел интернет-протоколов, вы найдете много вещей, которые разбиты на множество библиотек.

Шаг 2. Подумайте о том, что вы узнали из чтения библиотек. Чем больше вы читаете, тем больше принципов появится.

Совет. «Модуль» - это одноразовый файл многократного использования, в основном состоящий из определений классов и функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...