最終更新日 2024-06-19

HD.version.SDK ~戦略->ターン~

戦略->ターンの概念

戦略->ターンとは、戦略画面の大名ターンもしくは軍団ターンのことです。

「現在ターンが回っている大名」「ターンが回っている軍団」
を簡単に得ることが出来るよう、「戦略->ターン」オブジェクトが提供されています。

使い処

専用のイベントハンドラとして、「On_戦略_軍団ターン変更時
というイベントハンドラがあります。

よって、「戦略->ターン」オブジェクトを利用するのは、
「On_戦略_軍団ターン変更時」以外のイベントハンドラで、 ターン情報を得たい時、というのがほとんどとなります。

注意点

「大名ターン」と「大名ターン」の「間」など、「どの軍団のターンでもない」といった状態は頻繁に発生します。
そういった場合、ターン軍団番号やターン大名番号には「0xFFFF」が入った状態となります。

なお、戦争自体も「戦争を仕掛けた軍団」の行動の一部分ですから、
戦争をしかけた軍団の「戦略->ターン」に含まれます。注意してください。

使用例①

ターン大名番号とターン軍団番号
String^ 天翔記クラス::On_噴出メッセージ直前(String^ 元メッセージ, 噴出メッセージパラメタ型^ パラメタ) {

  int iGundanID = 戦略->ターン->ターン軍団番号;
  if (0 <= iGundanID && iGundanID < 軍団->配列->Count) {

    auto g = 軍団->配列[iGundanID];

    int iBushouID = g->軍団長_武将番号;

    if (0 <= iBushouID && iBushouID < 武将->配列->Count) {
      auto b = 武将->配列[iBushouID];
      デバッグ出力 << "軍団長" << b->姓名 << "ターン内のメッセージです。" << endl;
    }
  }

  int iDaimyoID = 戦略->ターン->ターン大名番号;
  if (0 <= iDaimyoID && iDaimyoID < 大名->配列->Count) {

    auto d = 大名->配列[iDaimyoID];

    int iBushouID = d->大名_武将番号;

    if (0 <= iBushouID && iBushouID < 武将->配列->Count) {
      auto b = 武将->配列[iBushouID];
      デバッグ出力 << "大名:" << b->姓名 << "ターン内のメッセージです。" << endl;
    }
  }

  return "";
}

使用例②

最も多い使用例の1つは、やはり、現在プレイヤのターンなのか?
といった判定でしょう。

ターンが回ってきているのはプレイヤ操作の軍団か?
String^ 天翔記クラス::On_噴出メッセージ直前(String^ 元メッセージ, 噴出メッセージパラメタ型^ パラメタ) {

  int iGundanID = 戦略->ターン->ターン軍団番号;
  if (0 <= iGundanID && iGundanID < 軍団->配列->Count) {

    auto g = 軍団->配列[iGundanID];

    if (g->Is_プレイヤ担当軍団) {
      デバッグ出力 << "プレイヤが直接操作している軍団のターン" << endl;
    }
    if (g->Is_プレイヤ麾下軍団) {
      デバッグ出力 << "プレイヤが支配下に置いている軍団(直接担当している第1軍団含む)のターン" << endl;
    }
  }

  int iDaimyoID = 戦略->ターン->ターン大名番号;
  if (0 <= iDaimyoID && iDaimyoID < 大名->配列->Count) {

    auto d = 大名->配列[iDaimyoID];

    if (d->Is_プレイヤ担当大名) {
      デバッグ出力 << "プレイヤの大名のターン" << endl;
    }
  }

  return "";
}

その他

戦略->ターンに関する主な所は以上となります。
詳細は「戦略_ターン.h」を参照してください。