2011-12-15 7 views
2

私はRPGを作成していますし、複数のファイルに分割してより良いものを整理しようとしています。 (つまり、キャラクターの作成だけで2000行以上だったのですが)これは私がやったことのないものですが、どうやってそれを行うのか本当に分かりません。だから、効率的に物事を設定する方法に関する一般的なアドバイスを得ることができたら、私は本当にそれを感謝します。私は実際には、私が読んだ、pythonのウェブサイト上のモジュールに関するページ以外は、この件に関して多く見つけることができませんでしたが、私はまだそれについて少し不明です。これは間違いなく最も混乱していて、今話題になっているのはプログラミングです...私はこのような漠然とした質問をするのは嫌ですが、私自身は進歩を遂げていませんので、あなたのうちの1人が私を正しい道につけることを望んでいます。複数のファイルをPythonでプログラミングするのに役立つ必要があります

具体的な例も示します。

私はキャラクターのすべての統計とスキルを1つまたは2つのリストに入れたいので、関数でそれらを使いやすくするために、別のファイルからのリストを引数として使用する手がかりがありません機能。これは私が試したことであり、うまくいくはずです。私はこのファイルをCharacterCreationにインポートして、 "StatCalculations.LevelUp(PLAYERSTATLIST)"を使用していますが、 '' module 'オブジェクトには' 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'を交換した場合、バグを見つけてください。各プレーヤを 'Player'クラスのオブジェクトにし、その特性をクラスメンバとして格納します。したがって、それらを名前で参照することができ、このような順序変数については気にする必要はありません。 – sarnold

+0

あなたがoopを学んでいるなら、[http://en.wikipedia.org/wiki/Single_responsibility_principle]はsarnoldのリンクを読んだ後で最初に読んでください。どういうわけか、最も才能のあるソフトウェアpplはそれを忘れてしまい、良いクラスデザインにとってはとても重要です。 – pyInTheSky

+0

pyInTheSkyのリンクは、http://en.wikipedia.org/wiki/Single_responsibility_principle - 末尾に ']'を付けないでください。 – sarnold

答えて

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

だから、私はPythonライブラリを読んで効率的に物事を設定する方法についていくつかの一般的なアドバイスなど

ステップ1を得ることができれば。 「関連する」ダース程度を選んでください。インターネットプロトコルのセクションを見ると、多くのライブラリまで分かれている多くのものが見つかります。

ステップ2.ライブラリを読んだことで学んだことを考えます。読むほど、より多くの原則が浮かび上がるでしょう。

ヒント。 "モジュール"は、再利用可能なsigleであり、主にクラスと関数の定義で構成されています。