2011-12-15 50 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步。想想你從閱讀庫中學到了什麼。你讀得越多,原則就會越多。

提示。一個「模塊」是一個單元,可重用的文件,主要由類和函數定義組成。