大名大名とは、「織田家」「武田家」といった大名のことです。 大名と一言で言っても3つの概念で構成されます。
大名家から大名武将個人を求めるこれはScenarioModのプログラムを組む際によくあることです。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) { int iBushouID = p大名情報[iDaimyoID].大名【武将番号】 - 1; if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "の、大名武将は、" << Get_名字(iBushouID) << Get_名前(iBushouID) << endl; } else { デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "には、空の大名スロットであり、大名情報はありません" << endl; } } } 武将が所属している大名家を求めるこれはScenarioModのプログラムを組む際によくあることです。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { int iBushouID = Get_武将番号【配列用】(顔番号::武田晴信); if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { int iDaimyoID = p武将情報[iBushouID].所属大名【大名番号】 - 1; // 浪人とか死亡とかではなく、大名家に所属しいているならば... if (0 <= iDaimyoID && iDaimyoID < 最大数::大名情報::配列数) { デバッグ出力 << "武田信玄は" << "「大名番号【配列用】:" << iDaimyoID << "」に所属しています" << endl; } else { デバッグ出力 << "武田信玄は大名家には所属していません" << endl; } } } プレイヤーが担当している大名かの判定bool Is_プレイヤ担当大名( WORD 大名番号【配列用】 ) プレイヤーは複数の大名(最大で8大名)を担当することがあり得ることに注意すること void カスタム::On_プレイヤ担当ターン《メイン画面》() { for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) { if (Is_プレイヤ担当大名(iDaimyoID)) { int iBushouID = p大名情報[iDaimyoID].大名【武将番号】 - 1; if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { デバッグ出力 << Get_名字(iBushouID) << Get_名前(iBushouID) << "はプレイヤの担当している大名です" << endl; } } } } 大名番号【配列用】から大名自身が所属する第1軍団の軍団番号【配列用】を求めるこれはScenarioModのプログラムを組む際によくあることです。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { int iBushouID = Get_武将番号【配列用】(顔番号::武田晴信); if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { int iDaimyoID = p武将情報[iBushouID].所属大名【大名番号】 - 1; if (0 <= iDaimyoID && iDaimyoID < 最大数::大名情報::配列数) { int iGundanID_1 = p武将情報[iBushouID].所属軍団【軍団番号】 - 1; // 武将番号【配列用】→軍団番号【配列用】へ int iGundanID_2 = p大名情報[iDaimyoID].所属軍団【軍団番号】 - 1; // 大名番号【配列用】→軍団番号【配列用】へ if (iGundanID_1 == iGundanID_2) { デバッグ出力 << "データは正常に動作しています" << endl; } else { デバッグ出力 << "データは不正であり、破損しています" << endl; } } } } 大名番号【配列用】から麾下の全ての軍団の情報を足すこれはScenarioModのプログラムを組む際によくあることです。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { int iBushouID = Get_武将番号【配列用】(顔番号::織田信長); if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { int iDaimyoID = p武将情報[iBushouID].所属大名【大名番号】 - 1; 番号リスト型 軍団リスト = Get_大名麾下軍団番号リスト【配列用】(iDaimyoID); int 兵数 = 0; // 織田信長が帰属する大名家の麾下軍団全ての兵数を足す for (int iGundanID : 軍団リスト) { 兵数 += Get_軍団兵数(iGundanID); } デバッグ出力 << "織田信長が帰属する大名の総兵数は" << 兵数 << endl; int 城数 = Get_大名所持城数(iDaimyoID); デバッグ出力 << "城数は" << 城数 << endl; } } 大名家の居城p大名情報[ix].所属居城【城番号】 大名家の居城の城番号を取得できます。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) { int iBushouID = p大名情報[iDaimyoID].大名【武将番号】 - 1; int iCastleID = p大名情報[iDaimyoID].所属居城【城番号】 - 1; if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数 && 0 <= iCastleID && iCastleID < 最大数::城情報::配列数) { デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "の、大名武将は、" << Get_名字(iBushouID) << Get_名前(iBushouID) << endl; デバッグ出力 << "居城は" << Get_城名(iCastleID) << Get_城称(iCastleID) << "です" << endl; } else { デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "には、空の大名スロットであり、大名情報はありません" << endl; } } } 商人関連商人との友好度を表すp大名情報[ix].商人 0~100の値を自由に取得、代入できます。 商人が怒って不在になっている。p大名情報[ix].商人不在 商人が怒っていて、商人不在なら「1」、商売可能なら「0」 商人が怒って不在になっている。p大名情報[ix].御用商人 御用商人が誰かが入っています。「御用商人::神屋宗湛」~「御用商人::灰屋紹由」までの値をとります。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { // 全ての大名が、50以上の商人との有効なら100に、50未満なら0にされたあげく、商人不在となる。 for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) { if (p大名情報[iDaimyoID].商人 >= 50) { p大名情報[iDaimyoID].商人 = 100; p大名情報[iDaimyoID].商人不在 = false; } else { p大名情報[iDaimyoID].商人 = 0; p大名情報[iDaimyoID].商人不在 = true; } // 大名が織田信長なら、御用商人を茶屋四郎次郎にする。 int iBushouID = p大名情報[iDaimyoID].大名【武将番号】 - 1; if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { if (p武将戸籍情報[iBushouID].顔番号 == 顔番号::織田信長) { p大名情報[iDaimyoID].御用商人 = 御用商人::茶屋四郎次郎; } } } } 朝廷関連朝廷との友好度を表すp大名情報[ix].朝廷 0~100の値を自由に取得、代入できます。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { // 全ての大名が、50以上の朝廷との有効なら100に、50未満なら0にされる for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) { if (p大名情報[iDaimyoID].朝廷 >= 50) { p大名情報[iDaimyoID].朝廷 = 100; } else { p大名情報[iDaimyoID].朝廷 = 0; } } } 評定済みp大名情報[ix].布教済 true か false を判定、代入できます。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) { if (p大名情報[iDaimyoID].評定済 == true) { デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "の大名は評定済み" << endl; } else { デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "の大名は評定済みではありませんが、ここで評定済みにします" << endl; p大名情報[iDaimyoID].評定済 = true; } } } 布教済みp大名情報[ix].評定済 true か false を判定、代入できます。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) { if (p大名情報[iDaimyoID].評定済 == true) { デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "の大名は評定済み" << endl; } else { デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "の大名は評定済みではありませんが、ここで評定済みにします" << endl; p大名情報[iDaimyoID].評定済 = true; } } } 有効な大名番号【配列用】の一覧を得る番号リスト型 Get_大名番号リスト【配列用】(BOOL ターン大名を含む=TRUE) 単純なfor文で判定するのを少し省略できます。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { 番号リスト型 有効大名リスト = Get_大名番号リスト【配列用】(); for (int iDaimyouID : 有効大名リスト) { デバッグ出力 << iDaimyouID << endl; } } 「ターン大名」自身を含まない場合には、引数に false (要するに「自分自身の大名以外」のリストを得たい場合)void カスタム::On_プレイヤ担当ターン《メイン画面》() { 番号リスト型 ターン大名以外の有効大名リスト = Get_大名番号リスト【配列用】(FALSE); for (int iDaimyouID : ターン大名以外の有効大名リスト) { デバッグ出力 << iDaimyouID << endl; } } 家紋p大名情報[ix].家紋 家紋を参照、変更することが出来ます。原則的には「0-159」の範囲。
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int iBushouID = Get_武将番号【配列用】(顔番号::織田信長); if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { int iDaimyoID = p武将情報[iBushouID].所属大名【大名番号】 - 1; if (0 <= iDaimyoID && iDaimyoID < 最大数::大名情報::配列数) { p大名情報[iDaimyoID].家紋 = 151; } } 画面更新(); } より詳細を知るには...
「大名」に関する主な所は以上となります。 |