最終更新日 2024-09-25
戦争 - ヘックス位置 - 広域
ヘックス位置を1つ1つ指定するのではなく、ざっくりと特定の条件を満たすヘックス位置群を取り出すためのAPIです。
野戦のヘックス

攻城戦のヘックス

野戦の特定の条件を満たすヘックス位置リストを取り出す
ヘックス位置リスト型 Get_特定の役割の野戦ヘックス位置リスト(int 野戦ヘックス役割)
野戦で城にへばり付いている武将を探す
void カスタム::On_残りターン変更《戦争画面》(int 残りターン数) {
if (Is_野戦中()) {
// 指定の役割を満たす「位置座標」のリスト
ヘックス位置リスト型 list = Get_特定の役割の野戦ヘックス位置リスト(野戦ヘックス役割::城);
番号リスト型 blist = Get_出陣中の武将番号リスト【配列用】《表示中マップ》();
for (int iBushouID : blist) {
// 武将の位置と、城の役割を満たす、位置の距離が1以内なら、その武将は城チップにへばり付いている。
ヘックス位置型 pos武将 = Get_武将の野戦ヘックス位置(iBushouID);
for (ヘックス位置型 pos城 : list) {
if (Get_ヘックス間隔(pos武将, pos城) <= 1) {
デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は城の近くに居ます" << endl;
break;
}
}
}
}
}
野戦で海岸沿いの陸に居る武将を探す
void カスタム::On_残りターン変更《戦争画面》(int 残りターン数) {
if (Is_野戦中()) {
// 指定の役割を満たす「位置座標」のリスト
ヘックス位置リスト型 list = Get_特定の役割の野戦ヘックス位置リスト(野戦ヘックス役割::海);
番号リスト型 blist = Get_出陣中の武将番号リスト【配列用】《表示中マップ》();
for (int iBushouID : blist) {
// 武将の位置と、海の役割を満たす、位置の距離が1以内なら、その武将は城チップにへばり付いている。
ヘックス位置型 pos武将 = Get_武将の野戦ヘックス位置(iBushouID);
for (ヘックス位置型 pos海 : list) {
//
if (Get_ヘックス間隔(pos武将, pos海) <= 1) {
// 本人自身は海チップに居ない
if (Get_野戦ヘックス役割(pos武将) != 野戦ヘックス役割::海) {
デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は海岸に沿いの陸に居ます" << endl;
break;
}
}
}
}
}
}
攻城戦の特定の条件を満たすヘックス位置リストを取り出す
ヘックス位置リスト型 Get_特定の役割の攻城戦ヘックス位置リスト(int 攻城戦ヘックス役割)
攻城戦で閉まっている門にへばり付いている武将を探す
void カスタム::On_ターン変更《攻城中画面》(int ターン数) {
if (Is_攻城戦中()) {
// 指定の役割を満たす「位置座標」のリスト
ヘックス位置リスト型 list閉門 = Get_特定の役割の攻城戦ヘックス位置リスト(攻城戦ヘックス役割::閉門);
番号リスト型 blist = Get_出陣中の武将番号リスト【配列用】《表示中マップ》();
for (int iBushouID : blist) {
// 武将の位置と、海の役割を満たす、位置の距離が1以内なら、その武将は城チップにへばり付いている。
ヘックス位置型 pos武将 = Get_武将の攻城戦ヘックス位置(iBushouID);
for (ヘックス位置型 pos閉門 : list閉門) {
//
if (Get_ヘックス間隔(pos武将, pos閉門) <= 1) {
デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は閉門の側に居ます" << endl;
}
}
}
ヘックス位置リスト型 list開門 = Get_特定の役割の攻城戦ヘックス位置リスト(攻城戦ヘックス役割::開門);
// 門が1つ以上ある城で、かつ、閉門が無くなった == 全ての門が開いてしまった
if (list閉門.size() == 0 && list開門.size() >= 1) {
デバッグ出力 << "全ての門が開きました" << endl;
}
}
}
攻城戦で閉門・開門の具合を調べる
void カスタム::On_ターン変更《攻城中画面》(int ターン数) {
if (Is_攻城戦中()) {
// 指定の役割を満たす「位置座標」のリスト
ヘックス位置リスト型 list閉門 = Get_特定の役割の攻城戦ヘックス位置リスト(攻城戦ヘックス役割::閉門);
ヘックス位置リスト型 list開門 = Get_特定の役割の攻城戦ヘックス位置リスト(攻城戦ヘックス役割::開門);
// 門が1つ以上ある城で、かつ、閉門が無くなった == 全ての門が開いてしまった
if (list閉門.size() == 0 && list開門.size() >= 1) {
デバッグ出力 << "全ての門が開きました" << endl;
}
}
}
攻城戦で炎上しているヘックス位置リストを取り出す
ヘックス位置リスト型 Get_炎上の攻城戦ヘックス位置リスト(int 攻城戦ヘックス炎上)
基本的に引数には何もしないしなくても良い。
もしも「炎上しいている位置リスト」ではなく、「炎上していない位置リスト」が欲しい場合は、
「攻城戦ヘックス炎上::無し」を指定すればよい。
炎上度合いを調べる
void カスタム::On_ターン変更《攻城中画面》(int ターン数) {
if (Is_攻城戦中()) {
// 炎上の役割を満たす「位置座標」のリスト
ヘックス位置リスト型 list = Get_炎上の攻城戦ヘックス位置リスト();
if (1 <= list.size() && list.size() < 2) {
デバッグ出力 << "小さく炎上しています" << endl;
}
else if (3 <= list.size() && list.size() < 7) {
デバッグ出力 << "炎上が少し広がってきました" << endl;
}
else if (7 <= list.size() && list.size() < 15) {
デバッグ出力 << "炎上がかなり広がってきました" << endl;
}
else if (15 <= list.size()) {
デバッグ出力 << "大炎上中であります!!" << endl;
}
}
}
本丸付近が炎上しているか調べる
void カスタム::On_ターン変更《攻城中画面》(int ターン数) {
if (Is_攻城戦中()) {
// 炎上の役割を満たす「位置座標」のリスト
ヘックス位置リスト型 炎上list = Get_炎上の攻城戦ヘックス位置リスト();
ヘックス位置リスト型 本丸list = Get_特定の役割の攻城戦ヘックス位置リスト(攻城戦ヘックス役割::本丸);
int count = 0;
// 本丸自身と、周囲1マスまでなら本丸周辺とする
for (ヘックス位置型 炎上pos : 炎上list) {
for (ヘックス位置型 本丸pos : 本丸list) {
if (Get_ヘックス間隔(本丸pos, 炎上pos) <= 1) {
count++;
}
}
}
if (1 <= count && count <= 2) {
デバッグ出力 << "本丸周辺に火の手があがっています" << endl;
}
if (3 <= count) {
デバッグ出力 << "本丸を取り囲むように火の手があがっています" << endl;
}
}
}
より詳細を知るには...
「戦争 - ヘックス位置 - 広域」に関する主な所は以上となります。 詳しくは「戦場情報型.h」「戦場情報列挙.h」などを参照してください。