回答編集履歴

1

tuiki

2022/08/09 05:42

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -1,3 +1,71 @@
1
1
  「ランダムオプション」を表すクラス(または構造体)を作り、
2
2
  装備は「ランダムオプション」を`List` (など) で保持する。
3
3
 
4
+ ---
5
+
6
+ デフォルトでは何もしないランダムオプションの抽象基底クラスを用意します。`StatusOption`としましょうか
7
+ (影響を与えるものなので`Effect`のほうが名前としては良さそうですが、`Option`で通します。)
8
+
9
+ 装備クラスはこのクラスのリストを持ちます。`options`としましょうか。
10
+ 装備クラス(かなにか)はランダムオプションの効果が必要になるたびに、`options`の中身を順番に見て、各オプションのその状況に応じたメソッドを呼びます。
11
+ 例えば「攻撃のときに`OnAttack(...)`を呼ぶ」、「説明文がほしければ`ExplanatoryText`プロパティを参照する」のようにです。
12
+
13
+
14
+
15
+ 装備クラスのインスタンスを生成する際に、
16
+ 望む種類、個数のランダムオプションを生成してリストに格納、何らかの形で装備クラスのインスタンスに渡します。
17
+
18
+ ぶっちゃけUnityはよく知らないので純粋なC#で **説明用の** コードを書きました
19
+
20
+ ``` C#
21
+ using System.Collections.Generic;
22
+
23
+ public abstract class StatusOption{
24
+ public virtual string ExplanatoryText{get{return "";}}
25
+ public virtual void OnAttack(/* 引数に何を取るかは私が決められることではないので頑張って設計してください */){
26
+ // なにもしない
27
+ }
28
+ public virtual void OnDamaged(/* 引数に何を取るかは私が決められることではないので頑張って設計してください */){
29
+ // なにもしない
30
+ }
31
+ }
32
+
33
+ public class StrOption : StatusOption{
34
+ private int value;
35
+ public StrOption(int value){
36
+ this.value = value;
37
+ }
38
+ public override string ExplanatoryText{get{return "攻撃力+" + value.ToString();}}
39
+ public override void OnAttack(/* 引数に何を取るかは私が決められることではないので頑張って設計してください */){
40
+ // 攻撃力を上げる処理
41
+ }
42
+ }
43
+
44
+ public class DefenceOption : StatusOption{
45
+ private int value;
46
+ public DefenceOption(int value){
47
+ this.value = value;
48
+ }
49
+ public override string ExplanatoryText{get{return "防御力+" + value.ToString();}}
50
+ public override void OnDamaged(/* 引数に何を取るかは私が決められることではないので頑張って設計してください */){
51
+ // 防御力を上げる処理
52
+ }
53
+ }
54
+
55
+
56
+
57
+ public class Hello{
58
+ public static void Main(){
59
+ // Your code here!
60
+
61
+ var options = new List<StatusOption>{new StrOption(1), new DefenceOption(2)};
62
+
63
+
64
+ foreach(var op in options){
65
+ System.Console.WriteLine(op.ExplanatoryText);
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+