最終更新日 2024-06-19

User.version.SDK ~官位~

官位の概念

官位と一言で言っても3つの概念で構成されます。

ここでは、よく利用するパターンをピックアップして解説します。

使用例①

全ての官位について所定の処理を施すいったシーンは少ないですが、
ここでは官位のプロパティの使い方を知る、ということで、
その代表的な例を行ってみましょう。

官位のプロパティの利用
    public static void My_戦略_軍団ターン変更時(int 軍団番号)
    {
        foreach (var k in 官位.配列)
        {
            // 全ての官位を従一位
            k.位階 = 列挙.官位.位階.従一位;

            Random r = new Random();
            k.効果 = r.Next() % 20 + 1; // 適当な乱数
        }

    }

なお、官位の「位階」と「効果」は家宝とは異なり、連動していません
このため、同じ位階であっても異なる効果の官位を設定することも可能です。

使用例②

次によくあるのが「特定の官位」を名指して何か処理を施すというものです。
天翔記の官位は全て一意、というわけではないので、
細かな処理をするためには、for文などで逐次判定処理が必要ですが、
名前から官位番号を手軽に引けた方が記述が簡単になるシーンも多いため、
名前から簡単に逆引きする手段が提供されています。

官位を名指しして誰かに持たせる
  public static void My_戦略_軍団ターン変更時(int 軍団番号)
  {
    int iKaniID = 官位.Find_官位番号("関白");
    int iBushouID = 武将.Find_武将番号(列挙.武将.列伝番号.今川義元);

    if (官位.配列.Exists(iKaniID) && 武将.配列.Exists(iBushouID))
    {
      官位.配列[iKaniID].所有武将番号 = iBushouID;
    }
  }

使用例③

官位は同じ名前が複数存在するため、場合によっては同じ名前のものをリストとして集める必要があるかと思います。
こういった用途には、C#のLINQが最適でしょう。

4つある参議に、ぞれぞれバラバラの効果を設定する
    public static void My_戦略_軍団ターン変更時(int 軍団番号)
    {
        var kKaniIDList = from k in 官位.配列 where k.官位名 == "参議" select k.番号;

        int i = 0;
        foreach ( int iKaniID in kKaniIDList)
        {
            官位.配列[iKaniID].効果 = 8 + ++i;
        }
    }

その他

官位について、主な解説は以上となります。
官位関連には他にもプロパティやメソッドがあります。
詳しくはHD.version.SDKソース内の「官位.h」や「官位列挙.h」を参照してみてください。