最終更新日 2024-09-25

HD.version.SDK ~戦争の参加者~

戦争の参加者の概念

戦争の参加者が誰なのか?
といったことを取り扱いたいことは多いものです。

ところが戦争の参加者といっても、様々な視点があります。

といった様々な分類があります。

注意点

戦争の具体的な参加勢力は、戦争が発生した直後に決まるわけではありません。
戦争が発生した後、「On_戦争参加勢力決定直後」イベントハンドラが呼び出される直前に、
具体的な戦争参加勢力が決定します。

使用例①


On_戦争参加勢力決定直後」以降であれば、
戦争中どこでも大名・軍団・武将に関する参加情報を引き出すことが出来ます。

大名の参加情報を得る
String^ 天翔記クラス::On_噴出メッセージ直前(String^ 元メッセージ, 噴出メッセージパラメタ型^ パラメタ) {

  if (戦争->Is_野戦中 || 戦争->Is_籠城戦中) {
    int iBushouID = パラメタ->第1人称_武将番号;
    if (0 <= iBushouID && iBushouID < 武将->配列->Count) {

      auto dlist = 大名->戦争->参戦大名番号リスト;
      for each (int iDaimyoID in dlist) {
        int iDaiBushouID = 大名->配列[iDaimyoID]->大名_武将番号;
        if (0 <= iDaiBushouID && iDaiBushouID < 武将->配列->Count) {
          デバッグ出力 << 武将->配列[iDaiBushouID]->名字 << "家参戦" << endl;
        }
      }

    }
  }

  return "";
}

使用例②

戦争を行っているのは、事実上「軍団単位」であるため、
参戦情報については、軍団情報が一番充実しているといえます。

軍団の参加情報を得る
String^ 天翔記クラス::On_噴出メッセージ直前(String^ 元メッセージ, 噴出メッセージパラメタ型^ パラメタ) {

  if (戦争->Is_野戦中 || 戦争->Is_籠城戦中) {
    int iBushouID = パラメタ->第1人称_武将番号;
    if (0 <= iBushouID && iBushouID < 武将->配列->Count) {

      auto glist = 軍団->戦争->参戦軍団番号リスト;
      for each (int iGundanID in glist) {
        auto g = 軍団->配列[iGundanID];
        int iGdcBushouID = g->軍団長_武将番号;
        if (0 <= iGdcBushouID && iGdcBushouID < 武将->配列->Count) {
          デバッグ出力 << 武将->配列[iGdcBushouID]->姓名 << "の軍団参戦" << endl;

          int iSdsBushouID = g->戦争->総大将_武将番号;
          if (0 <= iSdsBushouID && iSdsBushouID < 武将->配列->Count) {
            デバッグ出力 << "今回の戦の" << 武将->配列[iSdsBushouID]->姓名 << "軍団の指揮官は" << 武将->配列[iSdsBushouID]->姓名 << "です" << endl;
          }

          int stand = g->戦争->参戦立場;
          switch (stand) {
          case 列挙::軍団::戦争::参戦立場::攻撃軍: {
            デバッグ出力 << "攻撃軍です" << endl;
            break;
          }
          case 列挙::軍団::戦争::参戦立場::守備軍: {
            デバッグ出力 << "守備軍です" << endl;
            break;
          }
          case 列挙::軍団::戦争::参戦立場::攻撃の援軍: {
            デバッグ出力 << "攻撃の援軍です" << endl;
            break;
          }
          case 列挙::軍団::戦争::参戦立場::守備の援軍: {
            デバッグ出力 << "守備の援軍です" << endl;
            break;
          }
          case 列挙::軍団::戦争::参戦立場::中立軍: {
            デバッグ出力 << "中立軍です" << endl;
            break;
          }
          default: {
            デバッグ出力 << "不明な軍です" << endl;
            break;
          }
          }
        }

      }

    }
  }

  return "";
}

使用例③

武将という視点での、出陣者や参戦立場を取得したい
そういうシーンも多いものです。
武将番号から軍団番号を求めて、参戦立場を得る方法もありますが、
武将個々にも参戦立場のプロパティが直接提供されています。

軍団の参加情報を得る
String^ 天翔記クラス::On_噴出メッセージ直前(String^ 元メッセージ, 噴出メッセージパラメタ型^ パラメタ) {

  if (戦争->Is_野戦中 || 戦争->Is_籠城戦中) {

    auto alllist = 武将->戦争->出陣中_武将番号リスト;
    デバッグ出力 << "戦場全体で出陣中の武将一覧:" << endl;
    for each (int iBushouID in alllist) {
      デバッグ出力 << 武将->配列[iBushouID]->姓名 << " 参戦立場:" << 武将->配列[iBushouID]->戦争->参戦立場;
    }
    デバッグ出力 << endl;

    auto curlist = 武将->戦争->出陣中_表示戦場_武将番号リスト;
    デバッグ出力 << "現在表示中の戦場限定で、出陣中の武将一覧:" << endl;
    for each (int iBushouID in curlist) {
      デバッグ出力 << 武将->配列[iBushouID]->姓名 << " 参戦立場:" << 武将->配列[iBushouID]->戦争->参戦立場;
    }
    デバッグ出力 << endl;

  }

  return "";
}

その他

「戦争の参加者」について、主な解説は以上となります。
詳しくは「大名.h」「大名列挙.h」や「軍団.h」「軍団列挙.h」や「武将.h」「武将列挙.h」の
戦争関連部分を参照してみてください。