オブジェクト指向の思考スキルのゲームシステムを記述するために---- Pythonの基礎

1.多くのプログラマは、オブジェクト指向の考え方を知っている、とも雄弁、しかしでの使用にはスムーズに動作しないと。

  もちろん、私はそれらの一つでした。

  それでも、私はより深い理解のために、私たち教師の講義、オブジェクト指向の考え方に耳を傾けてきた、そして今日はあなたと共有するために例を使用することにしました。

  ようこそ前任者は、補正をコメント。

2.オブジェクト指向の三つの特徴:カプセル化、継承、多型

            6つの原則:開閉、単一責任、依存性逆転、再利用の組み合わせの原理は、リヒター、デメテルを交換します

3.しかし、これらの3つの機能とどのように反映させるために、私はそれに適用されるところから、6つの特定の原則を使用するには?

  次のコード例は、私が問題を議論するために、スキルゲームプロジェクトがかかります。

まず、トピックを投げます:

  次のようにスキルシステム、特定のスキルの効果を書きます:

  ドラゴン18人の手のひらを打つ:1点のダメージを:他の3秒、3は防御を減少させるようにめまい:100ポイント、2めまいによるダメージを他の30点防衛、持続時間3秒を減らします

  シックス・パルスエクスカリバー:1ダメージ:2秒間減速30:3フィート、3減速以外のZhentui:90は損傷、2 Zhentuiを引き起こし

  北深い魔法:1.傷害:99ポイントによる被害、2防衛を削減:減速機20、2秒間:他の20点の防衛、2秒、3減速の期間を短縮

 

  これは、オブジェクト指向の考え方のことですが、これはライン上の各スキルのクラスを作成するには、単純である、と言うだろう何人かの友人があるかもしれません。実際には非常に間違っています。

  、各スキルが異なるありますが、目の肥えた目が、見ることができますが、それぞれのスキルは重複したコードの多くを生成するクラスを作成する場合、その効果は、似ています

  例えば、損傷この効果は、上記の3つのスキルがあります。

  プロジェクトマネージャは、この効果はめまいではないことを教えてくれた場合にも、めまいは、10ポ​​イントの防衛を減らし、同時に変更しました

  これは、各スキルの効果はめまいが含まれていることを意味し、再度変更する必要がありますか?

実際には、オブジェクト指向の考え方は上記のコードを書くために5、我々は単一のクラスで作られた抽出された各効果を、置くことができ、そしてどれだけの効果各スキルが含まれています、

  その上に、クラスのスキルクラスの次の呼び出し直接的な効果。

直接コード6.騒ぎ、:

  `` `

= {sikll_file 
'ドラゴン18人の手のひらを打つ':[ 'DamageEffect(100)'、 'DizzinessEffect(3)'、 'LowerDeffence(30,3)']、
'6パルスエクスカリバー':[ 'DamageEffect(90) ' 'ノックバック(3)'、 'LowerSpeed(30、2)']、
'北深いマジック':[ 'DamageEffect(99) '、 'LowerDeffence(20,2)'、 'LowerSpeed(20,2)']
}

クラスSkillImpactEffect:
「」「
効果親クラス
メソッドサブクラスによって具現化技術の転送のための親クラスとして、上書き
」「」
DEF影響(自己):
上げNotImplementedError()

クラスDamageEffect(SkillImpactEffect):
「」 "
効果:害
"" "
DEF __init __(自己、値):
値= self.value
DEFインパクト(セルフ):
印刷(%のself.value '%Dの血ポイント削減'を)

LowerDeffenceクラス(SkillImpactEffect):
"" "
効果:減少防衛
" ""
DEF __init __(自己、値、タイム):
self.value =値
self.time時間=
DEFインパクト(セルフ):
印刷(「%dの防衛削減%d秒"%(self.value、self.time))持続

:クラスDizzinessEffect(SkillImpactEffect)
"""
効果:めまい
"" "
DEF __init __(自己、時間):
self.time時間=
DEFインパクト(自己を):
印刷( '%d秒のめまい' self.time%)の

クラスのノックバック(SkillImpactEffect):
"" "
効果Zhentui
" ""
DEF __init __(自己、値):
self.value =値
DEF影響(自己):
印刷( '敵に比べて%dのZhentui足!')

クラスLowerSpeed(SkillImpactEffect):
"" "
効果:削減
" ""
DEF __init __(自己、値、タイム):
self.value =値
self.time =時間
インパクトDEF(セルフ):
印刷( '減速は%d、Dの%の期間' %(self.value、self.time))

クラスSkillDeployer:
"" "
実用的なリリー
" ""
生成スキル(実行結果)
DEF __init__ (セルフ、名):
self.name名=
#{スキル負荷設定ファイル:[1つのエフェクト、2の効果.. ]}
自己.__ dict_skill_config self.load_config_file =()
効果は、オブジェクトを作成
自己.__ effect_object =自己。

#ロードスキルファイル。
返すsikll_file

DEFのcreate_effect_objects(セルフ):
は、適切なスキルに合わせて名前を作成しオブジェクト
list_effect_name =自己.__ dict_skill_config [self.name]
list_effect_object = []
項目についてlist_effect_nameで
#エフェクトオブジェクト、スキルのリストを追加すること
effect_object =のeval(項目)
list_effect_object。 APPEND(effect_object)
list_effect_object返し

DEF generate_skill(セルフ):
印刷( '%Sがリリース' self.name%)の
自己.__ effect_objectの項目について:
item.impact()


xlsbz = SkillDeployer( '龍18人の手のひらを打つ')
xlsbz。 generate_skill()
lmsj = SkillDeployer( '6つのパルスエクスカリバー')
lmsj.generate_skill()
bmsg = SkillDeployer( '北の深い魔法')
bmsg.generate_skill()

  `` `

 あなたがスキルを追加したいとき、あなたは、単に、ファイルsikll_fileにコードを変更する必要がスキルを追加することはできません静的ドキュメントなど、もはやこの形で上記のコードでは7ない、単にプロジェクトマネージャーを物事を変更することを恐れ、skill_file、 。

  増加の効果を変更し、または単に変更ビットの対応する効果を入力し、操作が非常に簡単です。

8.次に、上記のコードのオブジェクト指向の考え方を分析:

三つの特徴:
パッケージ:個別に、このような影響を与えるとしてパッケージそれぞれの効果
継承:様々な効果の影響抽象SkillImpactEffectの
様々なスキルを持つ変更アイソレータは、剥離性能に影響を与えます。
ポリモーフィズム:メソッドSkillImpactEffectクラス衝撃書き換え様々な効果への影響
リリースの呼び出しは様々な効果を行うSkillImpactEffect。
6つの原則:
オープンクローズ原理:リリースコードを変更せずに、新しい(スキル/結果に影響を与える)を追加します。
シングル責任を:変更分離するための責任SkillImpactEffect
特定の定義効果を担当しDamageEffect ..
スキルの放出の原因SkillDeployer
依存関係反転:(1)リリースそれは、具体的呼び出しの結果に影響を与えるが、SkillImpactEffectを呼び出すことはありません。
(2)抽象的には、特定には依存しません。
具体的には:
「DI」(コンフィギュレーションファイルを読み取ることによって放出
。放出が特に依存結果に影響しないように、衝撃オブジェクトの効果を作成する)
多重化の組合せ:影響放出との組み合わせの間の作用関係
各種の柔軟性は、選択されました結果に影響を与えます。
で置き換えリヒター:(1)親は、サブクラスで置き換えることができる場合が表示される
結果に影響を与える店舗のリストを解放するために、実際の様々なサブクラスは、に格納することができます。
デメテル:すべてのクラス間の結合度が非常に低いです。

おすすめ

転載: www.cnblogs.com/jeffrey04118110/p/11770555.html