ゲームにて個々の攻撃手段として継承元のクラスにhowtofightというフィールドを作り、そのフィールドの内容によって処理を変えるというメソッドを書いたのですが、この書き方は開発現場とかでかなり珍しいものなんですか?
Java
1public void attack(Hero target){ 2 switch(this.howToFight){ 3 case 1: 4 if(0 < hero.hp-this.power){ 5 System.out.println("敵はヒーローのHPを"+power+"削った"); 6 hero.hp-=power; 7 } 8 else{ 9 System.out.println("ヒーローは負けてしまった"); 10 hero.die(); 11 } 12 break; 13 case 2: 14 if(0 < hero.mp-this.power){ 15 System.out.println("敵はヒーローのmpを"+power+"削った"); 16 hero.mp-=power; 17 } 18 else{ 19 System.out.println("ヒーローは負けてしまった"); 20 hero.die(); 21 } 22 break; 23 } 24}
文脈がわかりません。どこかで「珍しい書き方だ」と言われたのでしょうか?
そもそも珍しいかどうかは目的を実現する上であまり関係ないと思いますが…。
ついでに、このコードはそもそも実行できないのではないかと思いますが、「一回攻撃」などの部分は省略されていて本来は具体的な実装があるということでしょうか?
珍しい書き方だとは言われていませんが、色々なコードを見ていく中で見たことがない書き方だったので、見にくいコードを書く癖をつけたくないなと。コードはそのまま書くと複雑だったので省略しています。
オブジェクト指向そのものの質問ではないようにみえます。もう少し全体の実装や思想が見えるくらいにコード提示できませんか?
どのようなゲームなのかも分かりませんが、一回攻撃か二回攻撃かという"程度"であれば switch するまでも無い(ループが一回か二回か)ような気がします。
つまり、想像の余地が大きすぎます。
継承元と継承先のクラスでの attack の定義・使われ方等、”オブジェクト指向”らしい(?)情報をご提示願えませんでしょうか。
hero なのか target なのか ^^;
howToFight を enum 化して、削る部分を組み入れちゃうのはどうでしょう。
回答1件
あなたの回答
tips
プレビュー