ヘックス位置を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」などを参照してください。