最終更新日 2024-09-25

HD.version.SDK ~大名~

大名の概念

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

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

使用例①

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

大名のプロパティの利用
void 天翔記クラス::On_戦略_軍団ターン変更時(int 軍団番号) {
  if (0 <= 軍団番号 && 軍団番号 < 軍団->配列->Count) {
    if ( 軍団->配列[軍団番号]->Is_プレイヤ担当軍団 ) {
      for each (auto d in 大名->配列) {
        if (d->Is_プレイヤ担当大名) {

          d->御用商人 = 列挙::大名::御用商人::小西隆佐;
          d->商人不在 = false;

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

          int iCastleID = d->居城番号;
          デバッグ出力 << "大名の居城" << 城->配列[iCastleID]->城名称 << endl;

          // 役職を管領に
          d->役職 = 列挙::大名::役職::管領;
        }
      }
    }
  }
}

使用例②

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

大名勢力の同盟や婚姻
void 天翔記クラス::On_戦略_軍団ターン変更時(int 軍団番号) {
  if (0 <= 軍団番号 && 軍団番号 < 軍団->配列->Count) {
    if ( 軍団->配列[軍団番号]->Is_プレイヤ担当軍団 ) {
      int 信長 = 武将->Find_武将番号(列挙::武将::列伝番号::織田信長);
      int 義輝 = 武将->Find_武将番号(列挙::武将::列伝番号::足利義輝);

      // 両者ともに登場している。
      if (0 <= 信長 && 信長 < 武将->配列->Count &&
        0 <= 義輝 && 義輝 < 武将->配列->Count) {

        // 両者ともに大名である。
        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)) {
            デバッグ出力 << "信長と義輝は婚姻関係です。" << endl;
          }
        }
      }
    }
  }
}

使用例③

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

織田信長の大名の「麾下の軍団」や「麾下の城」
void 天翔記クラス::On_戦略_軍団ターン変更時(int 軍団番号) {
  if (0 <= 軍団番号 && 軍団番号 < 軍団->配列->Count) {
    if (軍団->配列[軍団番号]->Is_プレイヤ担当軍団) {
      int iDaimyoID = 軍団->配列[軍団番号]->所属大名番号;

      デバッグ出力 << "配下軍団長名" << endl;
      auto 麾下glist = 大名->配列[iDaimyoID]->麾下軍団番号リスト;
      for each (auto g in 麾下glist) {
        int iGLeaderBushouID = 軍団->配列[g]->軍団長_武将番号;
        デバッグ出力 << 武将->配列[iGLeaderBushouID]->姓名 << endl;
      }

      デバッグ出力 << "麾下の城" << endl;
      auto 麾下clist = 大名->配列[iDaimyoID]->麾下城番号リスト;
      for each (auto c in 麾下clist) {
        デバッグ出力 << 城->配列[c]->城名称 << endl;
      }

    }
  }
}

その他

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