最終更新日 2024-09-25

ダイアログ - 大名ダイアログ

大名のリストを表示して、そこから選択してもらうためのダイアログを表示するAPIです。

大小関わらず、自作の独自イベントなどで利用することになるでしょう。

int 選択大名ダイアログ表示(番号リスト型 大名番号【配列用】リスト, int カラムオプション, int 主観大名番号【配列用】)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void カスタム::On_プレイヤ担当ターン《メイン画面》() {
    // 朝廷との友好が60を超える大名家のリストを表示し、選択する
    番号リスト型 ShowDaimyoList;
 
    for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) {
 
        if ((p大名情報[iDaimyoID].朝廷) > 60) {
            ShowDaimyoList.push_back(iDaimyoID);
        }
    }
 
    int iSelectedDaimyoID = 選択大名ダイアログ表示(ShowDaimyoList, カラム::大名::デフォルト);
 
    if (0 < iSelectedDaimyoID && iSelectedDaimyoID < 最大数::大名情報::配列数) {
 
        int iBushouID = p大名情報[iSelectedDaimyoID].大名【武将番号】 - 1;
        if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {
            デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "の支配する大名が選択されました" << endl;
        }
    }
    else {
        デバッグ出力 << "大名は選択されませんでした" << endl;
    }
}
        

カラムを指定することで、表示の列をカスタムすることが出来ます

1
2
3
// このカラム項目は ScenarioMod 2.7.9.7 で追加された。
int iSelectedDaimyoID = 選択大名ダイアログ表示(ShowDaimyoList, カラム::大名::友好|カラム::大名::同盟|カラム::大名::朝廷|カラム::大名::朝廷官位| カラム::大名::幕府役職);
        

1
2
int iSelectedDaimyoID = 選択大名ダイアログ表示(ShowDaimyoList, カラム::大名::大名);
    

ターン大名視点ではなく、別大名視点の一覧を表示することも出来ます。

例えば「武田信玄のターン」でありながらも、 「織田信長の治める国」の視点から見た大名リストを見せたいと思うかも知れない。
そういった場合は以下のようにする。

1
2
3
番号リスト型 myList;
myList = Get_大名番号リスト【配列用】();
int iSelectedDaimyoID2 = 選択大名ダイアログ表示(myList, カラム::大名::デフォルト, 30); // 30 は織田信長の「大名番号【配列用】」だと仮定した場合(実際には決め打ちではなく計算が必要)

実践では、30といった数字は以下のように計算して出すことになるでしょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void カスタム::On_プレイヤ担当ターン《メイン画面》() {
    // 朝廷との友好が60を超える大名家のリストを表示し、選択する
    番号リスト型 ShowDaimyoList;
 
    for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) {
 
        if ((p大名情報[iDaimyoID].朝廷) > 60) {
            ShowDaimyoList.push_back(iDaimyoID);
        }
    }
 
    // 織田信長が所属する大名番号を取得する
    int i織田信長BushouID = Get_武将番号【配列用】(顔番号::織田信長);
    if (0 <= i織田信長BushouID && i織田信長BushouID < 最大数::武将情報::配列数) {
        if (p武将戸籍情報[i織田信長BushouID].身分 = 身分::大名) {
            int i織田信長が所属する大名番号【配列用】 = p武将情報[i織田信長BushouID].所属大名【大名番号】 - 1;
            if (0 <= i織田信長が所属する大名番号【配列用】 && i織田信長が所属する大名番号【配列用】 < 最大数::大名情報::配列数) {
 
                // だれのプレイヤーターンかは関係なく「織田信長(の所属する大名家)」基準の表示を見る。
                int iSelectedDaimyoID = 選択大名ダイアログ表示(ShowDaimyoList, カラム::大名::デフォルト, i織田信長が所属する大名番号【配列用】);
 
                if (0 < iSelectedDaimyoID && iSelectedDaimyoID < 最大数::大名情報::配列数) {
 
                    int iBushouID = p大名情報[iSelectedDaimyoID].大名【武将番号】 - 1;
                    if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {
                        デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "の支配する大名が選択されました" << endl;
                    }
                }
                else {
                    デバッグ出力 << "大名は選択されませんでした" << endl;
                }
            }
        }
    }
}      

より詳細を知るには...

「大名ダイアログ」に関する主な所は以上となります。 詳しくは「ダイアログ情報型.h」を参照してください。