2011-12-15 59 views
2

我正在制作一个RPG,并且试图将事情分解成多个文件以更好地组织事情。 (我的意思是,单独创作的角色超过2000行)。但这是我从未做过的事情,我真的不知道该怎么做。所以,如果我能得到一些关于如何有效设置事物的一般建议,我会非常感激。除了关于python网站上的模块的页面外,我确实一直无法找到关于这个主题的很多内容,但我对此还是有点不清楚。这绝对是目前我在编程中遇到的最混乱,最少讨论的事情......而且我讨厌提出这样的模糊问题,但我绝对没有取得任何进展,希望你们中的一个能让我走上正确的道路。需要帮助用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 
+4

我不得不考虑使用[面向对象编程(http://en.wikipedia.org/wiki/Object_oriented_programming)方法,你的代码将大大受益 - 认为这将是多么艰难如果你在你庞大的玩家统计列表中交换了`BaseHEALTH`和`BaseMANA`,就会发现一个bug。让每个玩家成为Player类的对象,并将这些特征存储为类成员,这样你就可以通过名称来引用它们,而不用关心如何排序变量。 – sarnold 2011-12-15 03:06:40

回答

3

这里是一个小例子,让你去..你可以初始化像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

所以,如果我能得到关于如何有效地设置东西,第1步:一些普遍性的建议等

阅读Python库。选择一个或多个“相关的”。如果你看看互联网协议部分,你会发现很多东西都被分解到很多图书馆。

第2步。想想你从阅读库中学到了什么。你读得越多,原则就会越多。

提示。一个“模块”是一个单元,可重用的文件,主要由类和函数定义组成。