大名とは、「織田家」「武田家」といった大名のことです。
大名と一言で言っても3つの概念で構成されます。
大名という抽象的なカテゴリの概念。
大名の一覧リストに相当する「大名の配列」の概念。
大名の配列のうち、どれか1つの大名
これは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; } } } }
これは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; } }
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; } } 画面更新(); }
「大名」に関する主な所は以上となります。
詳しくは「大名情報型.h」や「大名情報列挙.h」などを参照してください。