最終更新日 2025-02-18
大名
大名とは、「織田家」「武田家」といった大名のことです。
大名と一言で言っても3つの概念で構成されます。
-
大名
大名という抽象的なカテゴリの概念。

-
「p大名情報」という配列
大名の一覧リストに相当する「大名の配列」の概念。

-
p大名情報[ix] (0 <= ix < 大名の総数)
大名の配列のうち、どれか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;
}
}
}
}
大名番号【配列用】から大名自身が所属する第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」の範囲。

0-76
予め用意されている家紋。血筋番号と同じものが割り当てられている。77-143
予め用意されている家紋。血筋番号とは特に関係ない家紋。144-159
予め用意されている家紋。編集可能な家紋(16個)の画像はこの144-159へと転写される。
void カスタム::On_プレイヤ担当ターン《メイン画面》() {
int iBushouID = Get_武将番号【配列用】(顔番号::織田信長);
if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {
int iDaimyoID = p武将情報[iBushouID].所属大名【大名番号】 - 1;
if (0 <= iDaimyoID && iDaimyoID < 最大数::大名情報::配列数) {
p大名情報[iDaimyoID].家紋 = 151;
}
}
画面更新();
}
より詳細を知るには...
「大名」に関する主な所は以上となります。
詳しくは「大名情報型.h」や「大名情報列挙.h」などを参照してください。