最終更新日 2024-06-19

User.version.SDK ~大名~

大名の概念

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

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

使用例①

大名の代表的なプロパティの制御は以下のようなものでしょう。

大名のプロパティの利用
    public static void My_戦略_軍団ターン変更時(int 軍団番号)
    {
        if (武将.配列.Exists(軍団番号))
        {
            if (軍団.配列[軍団番号].Is_プレイヤ担当軍団)
            {
                foreach (var d in 大名.配列)
                {
                    if (d.Is_プレイヤ担当大名)
                    {
                        d.御用商人 = 列挙.大名.御用商人.小西隆佐;
                        d.商人不在 = false;

                        int iBushouID = d.大名_武将番号;
                        デバッグ出力("プレイヤが担当している大名の武将名:" + 武将.配列[iBushouID].姓名);

                        int iCastleID = d.居城番号;
                        デバッグ出力("大名の居城" + 城.配列[iCastleID].城名称);

                        // 役職を管領に
                        d.役職 = 列挙.大名.役職.管領;
                    }
                }
            }
        }
    }

使用例②

大名勢力と大名勢力の間では、「同盟」や「婚姻」といったものが存在します。
姫が居るか居ないかに関わらず、婚姻なども結ぶことが可能です。

大名勢力の同盟や婚姻
    public static void My_戦略_軍団ターン変更時(int 軍団番号)
    {
        if (軍団.配列.Exist(軍団番号))
        {
            if (軍団.配列[軍団番号].Is_プレイヤ担当軍団)
            {
                int 信長 = 武将.Find_武将番号(列挙.武将.列伝番号.織田信長);
                int 義輝 = 武将.Find_武将番号(列挙.武将.列伝番号.足利義輝);

                // 両者ともに登場している。
                if (武将.配列.Exists(信長) && 武将.配列.Exists(義輝) )
                {

                    // 両者ともに大名である。
                    if (武将.配列[信長].状態 == 列挙.武将.状態.大名 && 武将.配列[義輝].状態 == 列挙.武将.状態.大名)
                    {

                        int 信長大名勢力ID = 武将.配列[信長].所属大名番号;
                        int 義輝大名勢力ID = 武将.配列[義輝].所属大名番号;

                        // 両大名勢力を同盟関係にする。
                        大名.配列[信長大名勢力ID].Set_同盟関係(義輝大名勢力ID);

                        // 両大名勢力を婚姻関係にする。
                        大名.配列[信長大名勢力ID].Set_婚姻関係(義輝大名勢力ID);

                        // 友好関係は実際には設定した通りの値とはならない。
                        // 天翔記の仕様では、友好値は「0, 10, 20, 30, 40, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100」のいずれかであるため。
                        // 自由に値を設定した場合、小さい側の規定値(例えば98と指定したら95)が採用される。
                        大名.配列[信長大名勢力ID].Set_友好関係(義輝大名勢力ID, 90);


                        if (大名.配列[信長大名勢力ID].Is_婚姻関係(義輝大名勢力ID))
                        {
                            デバッグ出力("信長と義輝は婚姻関係です。");
                        }
                    }
                }
            }
        }
    }


使用例③

大名に所属する麾下の軍団の一覧や、同じく大名支配下にある城の一覧などを
得たい場合もあることでしょう。

織田信長の大名の「麾下の軍団」や「麾下の城」
    public static void My_戦略_軍団ターン変更時(int 軍団番号)
    {
        if (軍団.配列.Exists(軍団番号))
        {
            if (軍団.配列[軍団番号].Is_プレイヤ担当軍団)
            {
                int iDaimyoID = 軍団.配列[軍団番号].所属大名番号;

                デバッグ出力("配下軍団長名");
                var 麾下glist = 大名.配列[iDaimyoID].麾下軍団番号リスト;
                foreach (var g in 麾下glist)
                {
                    int iGLeaderBushouID = 軍団.配列[g].軍団長_武将番号;
                    デバッグ出力(武将.配列[iGLeaderBushouID].姓名);
                }

                デバッグ出力("麾下の城");
                var 麾下clist = 大名.配列[iDaimyoID].麾下城番号リスト;
                foreach (var c in 麾下clist)
                {
                    デバッグ出力(城.配列[c].城名称);
                }
            }
        }
    }

その他

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