私はOOPの理解を深めようとしているので、コンソールアドベンチャーゲームを作成しました。私は基本的に3つの方法がある戦闘クラスを持っています:オーバーロードが原因でコードが肥大化する
public static void StartFight(Dragon dragonWarrior, Goblin goblinEnemy)
public static string YouAttack(Dragon dragonWarrior, Goblin goblinEnemy)
public static string EnemyAttack(Goblin goblinEnemy, Dragon dragonWarrior)
最初の人は誰かが死ぬまでもう一方を呼び出します。 YouAttackとEnemyAttackのようなメッセージが含まれます:
全てにおいてConsole.WriteLine("{0} the dragon attacks {1} and has dealt {2} damage",
dragonWarrior.Name, goblinEnemy.Name, damageDone);
を、することができますが、私の3つの方法をまとめたコードの90行を取ると言っています。
私の問題はこれです。私はオークを持っています。私は簡単にメソッドをコピーして貼り付けて、次のようにオーバーロードすることができます:
public static void StartFight(Orc orcWarrior, Goblin goblinEnemy)
しかし、それは膨らんでしまいます。特にオブジェクト戦士の数が増えるにつれて(ケンタウルス、デーモン、ドワーフ等)
どのオブジェクトが渡されたのかを知るためにオブジェクトとコンパイラを渡す方法はありますか?もしあれば、良いチュートリアルを知っている人はいますか?私は研究することができる別の解決策はありますか?
これはゴミの問題かもしれないが、私は完全に自己教えられていることを知っている。私はすべての問題が闘争になることができるようにコードを書く友人や教師はいません。 は継承(link)とポリモーフィズム(link)あなたが探していると呼ばれる事前
抽象クラスまたはそれより優れたインタフェースを探します。彼らはあなたが尋ねたものを正確に援助します。 –
"インターフェース"、 "継承"、 "多形性"、そしておそらく "ジェネリック"というコンセプトに精通している必要がある検索用語。 – dlatikay
継承と仮想メソッドについても読んでください。 – Shoter