大名

大名とは、「織田家」「武田家」といった大名のことです。

大名と一言で言っても3つの概念で構成されます。

  • 大名

    大名という抽象的なカテゴリの概念。

    PICTURE

  • 「p大名情報」という配列

    大名の一覧リストに相当する「大名の配列」の概念。

    PICTURE

  • p大名情報[ix] (0 <= ix < 大名の総数)

    大名の配列のうち、どれか1つの大名

    PICTURE

大名家から大名武将個人を求める

これは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].御用商人 = 御用商人::茶屋四郎次郎;
			}
		}
	}
}
		

PICTURE

PICTURE

朝廷関連

朝廷との友好度を表す

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 を判定、代入できます。

PICTURE

void カスタム::On_プレイヤ担当ターン《メイン画面》() {

	for (int iDaimyoID = 0; iDaimyoID < 最大数::大名情報::配列数; iDaimyoID++) {
		if (p大名情報[iDaimyoID].評定済 == true) {
			デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "の大名は評定済み" << endl;
		}
		else {
			デバッグ出力 << "大名番号【配列用】:" << iDaimyoID << "の大名は評定済みではありませんが、ここで評定済みにします" << endl;
			p大名情報[iDaimyoID].評定済 = true;
		}
	}
}
		

布教済み

p大名情報[ix].評定済

true か false を判定、代入できます。

PICTURE

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」の範囲。

PICTURE

  • 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」などを参照してください。