🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

2583閲覧

処理をどのクラスに記述すればいいかわからない

orochinodoppo

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

2クリップ

投稿2019/10/26 08:08

編集2019/10/26 09:11

最近個人でC#を使ってゲームを作成しているのですが、
たまに「この処理どのクラスに書くべきなのか?」がわからなくなります。

例えば、プレイヤーと敵が存在していて、プレイヤーが敵を攻撃したとします。
プレイヤーが敵を攻撃をする処理はプレイヤークラスに記述すると思いますが
敵のHPを減らす処理や敵のHPが0になったら消滅させる処理はどこに書けばいいのかわからなくなります。
案① プレイヤーが攻撃したからプレイヤークラスに記述するのか
案② 敵のHPや存在に関するから敵クラスに記述するのか
案③ それともまた別のクラスを用意するのか
ちょっと伝わりにくいかもしれません。すみません。

// プレイヤークラス public class Player : MonoBehaviour { Enemy enemy; SystemManagement system; void Start() { enemy = GameObject.Find("Enemy").GetComponent<Enemy>(); system = GameObject.Find("SystemManagement") .GetComponent<SystemManagement>(); } // ボタンクリックしたら実行される void onClick() { // 案① enemy.hp = enemy.hp - 5; if (enemy.hp < 0) { Destroy(enemy.gameObject); } // 案②(enemyクラスでHPが0以下になったら消滅する。) enemy.hp = enemy.hp - 5; // 案③ system.attack(enemy); } }
// 敵クラス public class Enemy : MonoBehaviour { public int hp = 10; void Update() { // 案② if (hp < 0) { Destroy(this.gameObject); } } }
// システムマネジメントクラス public class SystemManagement : MonoBehaviour { public void attack(Enemy enemy) { enemy.hp = enemy.hp - 5; if (enemy.hp < 0) { Destroy(enemy.gameObject); } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/10/26 08:10

「ベストプラクティスはない」というのが答えになりますが、 タイトルはもっと具体的に要件に寄せられたほうが良いかと思います
orochinodoppo

2019/10/26 08:22

確かにそうですね。 タイトル修正しました。 ご指摘ありがとうございます。
m.ts10806

2019/10/26 08:30

あとできれば、現在のコードを提示された方がより具体的なアドバイスを得られると思います。 現在の状態だと文章だけですので現状が伝わりづらい=問題に具体性がない です。
orochinodoppo

2019/10/26 09:14

ご指摘ありがとうございます。 現在のコードはないのですが、パパッと作ってみました。 ちょっとはわかりやすくなりましたかね?
guest

回答3

0

解決済みの質問相手にゲームプログラミング経験のない門外漢な僕が書くのもおかしな話かもしれませんが、
自分ならこんな風にするといいかもと思いついたので回答として挙げてみます
また、HPと書いてあるのでRPGっぽい戦闘計算を必要とするものを想定します

敵・味方にかかわらず親クラスとして「攻撃する」メソッドと「攻撃を受ける」メソッドを用意します
攻撃するメソッドでは自身の攻撃にかかわる計算(攻撃力や装備・バフ・デバフの影響計算)を行い、攻撃対象の攻撃を受けるメソッドに計算した攻撃値と影響のあるデータ(属性など)を引数として呼び出します
で、攻撃を受けるメソッドでは引数で渡された攻撃相手の攻撃値と影響のあるデータをもとに自身の防御力や攻撃をするメソッドで行ったのと同じように防御力にかかわる計算を行いダメージ計算を行います
そしてHP増減計算メソッドへダメージなので計算した被ダメ値(負の数とするかもしくは回復/被ダメのフラグを渡すか被ダメメソッドと回復メソッドに分けるかはお好みで)を引数にして呼び出し、HP計算を行う

といった流れで行うといいかなーと思います

この形でした理由ですが、
HP計算は確かに攻撃を受ける側の問題ですが、攻撃を与える側にもバフデバフなどの影響要素がある以上攻撃を与える側でも計算を行う必要があるはずです
また、グループ攻撃だったりSPRGやTDのような感じだと範囲攻撃で距離や方向で攻撃力の変化がある場合も考えると攻撃を与える側での細かい計算を与える側のメソッド内で行い、受ける側は受ける攻撃の強さを値として受け取り攻撃を受ける側のメソッドで計算するしかないというところでメソッドがそれぞれに必要であると考えました

と、上記のような感じでどちらか一方に置く必要はないかと思いますので、一つの攻撃処理であってもどこまでの計算はどちら側の領分なのかといったことを考えて適切に設計していけばいいかと思います

蛇足
例えば敵の背中を殴るって行為でも殴る側がどれだけの力で殴るかや殴る人がひょろい場合やムキムキマッチョな人だと同じ全力で殴るでも受けるダメージは違います
また、同じ人が同じ力で敵を殴るとしても相手が痛みに弱い人ならめっちゃ痛がるでしょうし、「鍛えているからだ!」とかいうような人ならあんまり痛くないでしょうし、特殊な訓練を受けた人なら「もっとつよくなぐってくだしゃひぃ~」とか言って回復しているかもしれません
それぞれの違いはそれぞれの内部で保持する情報でしかないのでその影響計算はそれぞれで行うのが妥当って感じですね
そのうえでインターフェースを定義するなり基底クラスを定義するなりして敵だろうが見方だろうが同じ形で計算できるようにすると汎用性が高まるので作るのが楽になるかもと思った次第です

追記:2019年11月02日

コメントで追記した内容をもとに試しで書いてみた
なお、UnityではC#8.0は未実装だと思うので、interface ICharactorには実装が書けないので、味方クラスと敵クラスすべてに攻撃をするメソッドと攻撃を受けるメソッドを実装する必要があります

C#

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 ICharactor ゆーしゃ = new 味方(); 6 ゆーしゃ.お名前 = nameof(ゆーしゃ); 7 ICharactor つかいっぱー = new 味方(); 8 つかいっぱー.お名前 = nameof(つかいっぱー); 9 10 ICharactor 雑魚えー = new 敵(); 11 雑魚えー.お名前 = nameof(雑魚えー); 12 ICharactor 雑魚びー = new 敵(); 13 雑魚びー.お名前 = nameof(雑魚びー); 14 15 var 倒せたかな = ゆーしゃ.攻撃をする(雑魚えー); 16 if(倒せたかな) 17 { 18 Console.WriteLine($"{ゆーしゃ.お名前}は{雑魚えー.お名前}を倒した!"); 19 } 20 var たげ = 雑魚えー.生きてるの ? 雑魚えー : 雑魚びー; 21 倒せたかな = つかいっぱー.攻撃をする(たげ); 22 { 23 Console.WriteLine($"{つかいっぱー.お名前}は{たげ.お名前}を倒した!"); 24 } 25 } 26 } 27 28 internal interface ICharactor 29 { 30 // これ、C#8.0で処理が書ける 31 // C#8.0未満では{から}までが書けないので各クラスで実装を必ず書く必要がある 32 public bool 攻撃をする(ICharactor target) 33 { 34 return target.攻撃を受ける(攻撃力); 35 } 36 37 //これも同じ 38 public bool 攻撃を受ける(double 攻撃値) 39 { 40 var isDead = Hp <= 攻撃値; 41 42 // イールドは定義できないのでhpのフィールドを変更することができない 43 // かといってhpはげったーのみにしたいので処理が書けない 44 //Hp -= 攻撃値; 45 46 return isDead; 47 } 48 49 public double 攻撃力 { get; } 50 51 public double 防御力 { get; } 52 53 public double Hp { get; } 54 55 public bool 生きてるの { get; } 56 57 public string お名前 { get; set; } 58 } 59 60 public class 味方 : ICharactor 61 { 62 private double atk = 2f; 63 public double 攻撃力 => atk; 64 65 private double vit = 1f; 66 public double 防御力 => vit; 67 68 private double hp = 10f; 69 public double Hp => hp; 70 71 private bool isDead = true; 72 public bool 生きてるの => isDead; 73 public string お名前 { get; set; } 74 75 public bool 攻撃を受ける(double 攻撃値) 76 { 77 var 被ダメ = 攻撃値 - vit; 78 isDead = hp <= 被ダメ; 79 80 hp = isDead ? 0 : hp - 被ダメ; 81 82 return isDead; 83 } 84 85 } 86 87 public class 敵 : ICharactor 88 { 89 private double atk = 1f; 90 public double 攻撃力 => atk; 91 92 private double vit = 2.3f; 93 public double 防御力 => vit; 94 95 private double hp = 1.5f; 96 public double Hp => hp; 97 98 private bool isDead = true; 99 public bool 生きてるの => isDead; 100 public string お名前 { get; set; } 101 102 public bool 攻撃を受ける(double 攻撃値) 103 { 104 var 被ダメ = 攻撃値 - (vit / 2); 105 isDead = hp <= 被ダメ; 106 107 hp = isDead ? 0 : hp - 被ダメ; 108 109 return isDead; 110 } 111 } 112

投稿2019/10/26 14:27

編集2019/11/01 17:13
len_souko

総合スコア1363

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

len_souko

2019/10/26 14:30

追記:HPが0になった場合はキャラを管理しているクラスにイベントを発行して管理クラスの方で処理をするって形がいいかと思います
orochinodoppo

2019/10/26 17:03

確かにインターフェースにダメージ計算処理を書くのがしっくりきますね。 インターフェースってどういう時に使えばいいかよくわからなかったのですが、こういう時に使うんですね。 勉強になりました。 ありがとうございます。
len_souko

2019/11/01 16:09

一応、インターフェースには実装はできませんので、メソッドの宣言くらいになります 戻り値と引数の型とメソッド名だけの定義で、そのインターフェースを継承したクラスはその実装(この場合はメソッドの中の処理を書くこと)を必須とします なお、一応と書いたのは、C#の8.0からはデフォルト実装という機能でインターフェースでメソッドの宣言だけでなく実装までもできてしまうようになりました なので、単純に回答の例でいうとダメージを受けるメソッドで防御力も属性の相性も何も考えずにHPから引数で受け取った攻撃値を引く処理を実装しておき、実際のクラスでは必要に応じてそれをオーバーライドしてカスタマイズした処理を書くという感じにできるようです なお、クラスと違ってインターフェースは多重継承できます 使う側は固有のクラスでなくインターフェースの攻撃を受けるメソッドを呼ぶ形になります
guest

0

ベストアンサー

恐れ多いですが、「どこに記述すればいいか」に関しては…

基本的にEnemyの「HP」が0になったら「破棄処理」を流したいはずです…。
となると、敵側に記述するのが正しいです…。

プレイヤーはあくまで「攻撃をした」という処理に留め
敵は「外部要因でHPが0になったら消滅する」という処理にするべきです…。

投稿2019/10/26 09:09

hermit19901127

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hermit19901127

2019/10/26 09:14

これは小言ですが…「依存性」を少なくする…事になります。 プレイヤーの中にモンスターのダメージ処理を入れると、モンスターのダメージ処理がプレイヤー依存となります… プレイヤーはあくまでダメージを与える関数に留め、その関数でダメージを受けたモンスター側が、受け取ったダメージ値で減算処理を行い、結果が0以下になったら、モンスター側のソースで破棄処理を行う。 それがよいかと思う次第です…。というより、ゲーム業界的にも基本的には自己の破棄は死ぬモンスターに付与されたオブジェクトが担当するパターンが殆どです…。
orochinodoppo

2019/10/26 09:19

回答ありがとうございます! 質問の案②みたいにHPを減らすのはプレイヤーで消滅処理はEnemyクラスに記述するべきですかね。 参考にさせていただきます。
hermit19901127

2019/10/26 09:28

案2で個人的には間違いないですね。 むしろ、これ以外の実装方法が個人的に思いつかないし、どう違う実装方法をしても非効率だと思う次第です…。
orochinodoppo

2019/10/26 09:39

すごく参考になります! いままでよくわかんなくてダメージ計算処理とか敵の消滅とかレベルアップとか全部システムマネジメントとかいうなんでもクラスを作って記述してました。 いずれゲーム プログラマーになりたいので、すごく参考になりました。 ありがとうございました。
hermit19901127

2019/10/26 09:47

おお、ゲーム業界志望ですか… これは雑談ですが ・基本情報技術者試験 ・応用情報技術者試験 の資格と、 物理数学の知識 「それを実際にシミュレートした、企業に提出できるデモ」 があるといいかもしれませんね^^ ゲームプログラマーとして読むべき本として、 もし、オンラインゲーム会社に入るのであれば オンラインゲームを支える技術  --壮大なプレイ空間の舞台裏 で検索して出た書籍を読むといいと思います。 ゲームプログラマー就職頑張ってください!応援してます!
orochinodoppo

2019/10/26 10:04 編集

ゲームプログラマーって数学大事なんですね。 勉強するのが本当に苦痛なので 今はなにも考えずにポートフォリオとしてトルネコの大冒険をほぼパクって作ってますw 実際に作ってみると色々と考えさせられます。 「この処理・・・ここに書いていいのか?」って思って質問させてもらいました。 なに作りたいとかはまだあまり無いですけど、今はなんでもオンラインできますもんね。 参考にさせていただきます。 色々教えてくださって本当にありがとうございます。
hermit19901127

2019/10/26 10:08

ゲームプログラマとしてダイレクトに入ろうとすると「物理学」が入りますね…。 例えば「投げた物質の落下速度」等… ポートフォリオとしてはデザイナでしょうか? ならポートフォリオの数を増やすしかないです…。 企画として入るなら、社内で抱えてる「デバッカー」からアルバイトとして入って、そこから「プランナー」として正社員になる道もありますね。 「デバッカー」から始まって「プロデューサー」になった人もいます…。 主の最終地点は「ゲーム業界就職」だと思いますが ・プログラマー ・デザイナー ・プランナー どれなのでしょう… 雑談程度ですが、きになる次第です…。
Zuishin

2019/10/26 10:11

ソフトウェア業界にいた人がデバッカーなんていいますかね。
hermit19901127

2019/10/26 10:12

どうやってゲーム業界に潜り込むのがいいか、と考えると ・物理学というか、企業先にソース事見せれる成果物のあるプログラマ ・グラフィックツール学んでポートフォリオそれなりに揃えたデザイナ です。 プランナーというと、「自分の思いつきで好きなゲームを作れる」と思いがちですが、 「会社の意向に合ったプランと作りたいゲームがある場合、それが”稼げる”」という事を重役に伝える必要があります。 そして、そのプランナもまずは「デバッグ」等、ゲームそのものをしろうとするする姿勢が必要となり、難易度は高いです…。 何か他に質問があれば、暇なのでお答えいたします…。
hermit19901127

2019/10/26 10:13

Zuishinさん 僕が元々いたのはゲーム業界です… そのうえで「ゲームのテスト」をする人を「デバックさん」とか「デバッカー」といってました。
hermit19901127

2019/10/26 10:17

忘れてました…。「デバッグから『プランナー』になる方法」です… 基本的にデバッグさんは、「アルバイト」として雇われます。 そこからゲームの仕様等を知り、基本的に「プランナー」として正社員になるという立ち回りになります。 このキャリアプランは簡単ではありますが、デバッカー時代はアルバイトなので、もちろん脱落者が多いのも気を付けてください。 なぜ脱落するか…。 ゲームの「単純作業」ばかりを要求され、そこのバグを要求されるから。です。
orochinodoppo

2019/10/26 10:18

プログラマーですね。 今はWEBプログラマーとして働いているのですが、やっぱりゲーム作りたいなと思って休みの日に個人でゲーム作ってます。 ゲームもプログラムも好きなのでゲーム作るのは楽しいです! hermitさんはゲーム 業界の方なんですか?
hermit19901127

2019/10/26 10:21

6年前からゲームを作っていた。というのが、解答になりますね…。 でもゲームも斜陽産業なので、今は地方の企業で常用派遣として業務用システム作ってますね。 でも、「形が見えやすい」と言う点では面白いのは変わりません
hermit19901127

2019/10/26 10:24

ゲームを効率よく作るなら「Unity」とか「UnrealEngine4」が無料で使える恵まれた時代です… ゲームを仕事とするなら、すでに韓国中国が日本に攻めてるレッドオーシャンです… 私自身は6年間、東京でゲーム開発をしてましたが、今は地方でWFPを使った開発を地方で行っております…。
hermit19901127

2019/10/26 10:33

WPFでした…ウィンドウズプラットフォームフレームワーク。 Windows上で、UIがあるアプリケーションを作るフレームワークです。 面白いですよ!Prismというライブラリや、それに付随するDIソフト等、興味深いものが多いです!
Zuishin

2019/10/26 10:38

デバッカーでなくデバッガーで、以下のサイトで説明されている通りのように思っていましたが、https://kuguru.jp/11557 会社によって違うのかもしれませんね。 DI ソフトという言い方も馴染みがありません。
hermit19901127

2019/10/26 10:46

Zuisinさん 最近だと、デバッグ専門として、デジタルハーツ社があって、 そこにゲーム会社やパチンコソフト社等も依頼してる事が多いですね…。 DI、ソフトこれは私の説明と言うか…理解不足です… WPFで簡単にWindowsのソフトウェアが作れるツールがあります。 で、そこにPrismという、VMMVモデルをサポートするライブラリがあり、 そのライブラリが扱うDI(コンテナを利用して依存性注入を行うがあるのですが) そのDIがUnityだのDryIocだのSimpleなんとかだのと別れてて、 いま、そのDI部分の学が追い付てない状態です…。 このへん、ちゃんと私的に理解したいので、理解したらブログでも記載する次第です…。 あの界隈はDI(依存性注入…というか、Prism基準のライブラリ開発)部分で相当な争いが起こってる状態です…
Zuishin

2019/10/26 10:52

力任せに殴り合うシューティングゲームのような単純なゲームなら、攻撃の処理を敵に任せても良いと思いますが、スキルや魔法や属性や精神攻撃など複雑なルールのあるゲームだと、敵がプレイヤーのクラスや種族に応じた全攻撃を処理しなくてはならなくなるので、それでは無理が来ます。攻守ところを変えると、プレイヤーと敵が同じクラスから派生しなくてはならなくなります。 攻撃はキャラクターとは別に攻撃クラスを作る方が良いのではないでしょうか。そうでないと敵クラスが肥大化しすぎると思います。
Zuishin

2019/10/26 10:53

VMMV も聞いたことがありません。WPF のプロから出た言葉とは思えません。
hermit19901127

2019/10/26 10:59

>力任せに この部分は応用編なので、質問者さんに対する応答だと思う次第です… >VMMV も聞いたことがありません 「MVVM」でしたね。たしかにプロでないというか、学習中です。 そこを間違ったのは謝ります…が、 そうですね。 VS起動して「
hermit19901127

2019/10/26 11:02

間違って途中投稿しましたが…もう後に引けませんね… DryIocでPrismでWPF作って、それで「DryIoc」というプロジェクトを作り、使うDIを「DryIoc」を選択してビルドするとエラーが出る ここ、説明できますか? 前提条件として、 ・VisualStudioで「拡張機能(X)」→「拡張機能の管理」から「Prism Template Pack」をインストールして、 それで作るテンプレから「DryIoc」を作ってくれ と言う感じですが…
Zuishin

2019/10/26 11:04

なぜ私が説明しなければいけないのかわかりません。
hermit19901127

2019/10/26 11:08

>VMMV も聞いたことがありません。 これに関しては、私の間違いだと回答しました。 >WPF のプロから出た言葉とは思えません。 直接的に言いますが、この発言「要ります?」 私はたしかに勉強中ですが、 そこまでいうなら、あなたの知見が問いたく、この質問を出した次第です。
Zuishin

2019/10/26 11:11

「これがゲーム業界の常識」とあちこちの回答で書いているのを目にしたので、つい余計なことを書きました。
hermit19901127

2019/10/26 11:18

ボクが「ゲーム業界」を看板に回答してるのが気に入らないとお見受けしますが… ここでUnityの質問をしてる子は「ゲーム業界の人はどういう風にコードを打ってるのか」を 気にしてる次第だとお見受けし、 それに対して、ボクが思う最適解を提示してるだけですね…・。 ボクはゲームを作る子に対して「これがゲーム業界でやってたやり方だよ」ってのを純粋に教えたい。 ただ、それだけです。
Zuishin

2019/10/26 11:19

いくつか回答を目にしましたが、プロとしてやってきた人の回答に思えなかったので。
hermit19901127

2019/10/26 11:23

ゲーム開発におけるUnity開発自体なんて単純ですよ。 ただ、端末ごとのバージョンや端末固有の不具合に苦しめられる不具合が多いです。 マニフェストファイルの設定等、むしろプログラムと関係ない所で苦しめられる所が多いです。
退会済みユーザー

退会済みユーザー

2019/10/27 00:03 編集

おす! Zuishin に遊ばれてるだけだって気付かねぇのか。 おめぇ、別の意味で凄ぇ奴だな。
hermit19901127

2019/10/29 17:05

おす! 無神経と言う点ではオレも反省する部分あるから、反省する次第だぜ! Zuishinに遊ばれてるのが「馬鹿にされてる」のか「単に煽られてる」か その意図までは読めねぇが、プログラマってそういう生き物だと思ってるぜ! あまり褒められた事ではありませんがm 私の無神経カウンターは43万です…。
Zuishin

2019/10/29 21:51

ツイッターでかなりガス抜きしてたようですが。
退会済みユーザー

退会済みユーザー

2019/11/01 05:12

Zuishin 悪ぃなぁ、せっかく後の楽しみに取っておいた弾を使えなくしちまってさあ。
len_souko

2019/11/01 17:31

hermit19901127さん >そこまでいうなら、あなたの知見が問いたく、この質問を出した次第です。 質問主の出したと全く関係ない質問を回答者であるあなたが第三者へ出すのはおかしくありませんか? 質問のタグにあるC# Unity ゲーム開発 これらと関係のないWPFの全く関係のないことを聞いて何の意味がありますか? Zuishinさんの指摘はタグからあなたの回答をゲーム業界の常識として質問者が鵜呑みにするとまずそうだという指摘になるのでそこは問題ないかと思います が、hermit19901127さんのZuishinさんに対する質問は質問主のorochinodoppoさんには全く関係のない話ですよね?そこで仮にZuishinさんが分からないと答えようが正解を当てようがorochinodoppoさんにとってhermit19901127さんの回答やコメントが信頼するに値するかどうかとは全く影響のない話だと思います 言いくるめられたので単にマウント取りたいだけとしか見えません。 ここはQAサイトです 質問に対する回答や回答の信頼性の話なら重要ですが回答者間の質問と関係ない知識の有無からくる上下関係などまったく意味のない話です
guest

0

案① プレイヤーが攻撃したからプレイヤークラスに記述するのか
案② 敵のHPや存在に関するから敵クラスに記述するのか
案③ それともまた別のクラスを用意するのか

処理を書くべき場所を迷っている時点で,案③です.
その処理は「既存の{プレイヤー,敵}どちらの役割とも言えない」という答えが出ている,ことでしょうから.
(で,後から「やっぱこの処理は敵の領分だったわ」とか明確になったら敵の中に移動させればよい)

(実際にどんな複雑なルールの物を作るのか不明ですが)
攻撃側と被攻撃側とから,攻撃という処理に必要になる情報を取り出しさえすれば,攻撃結果を求めることができるハズです.
その結果情報を被攻撃側に(必要ならば攻撃側にも)伝達してやれば良いでしょう.
(例えば,被攻撃側に「お前のHPを5だけ減らせ」とか)

HPが0になったら消滅させる

に関しては,「俺を消滅させろ(させていいぞ)」という情報を,管理している側に何らかの状態で伝達(あるいは単に表現)すれば良いでしょう.

投稿2019/11/01 05:47

fana

総合スコア11985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問