最終更新日 2024-09-25

語句変化

語句変化とは、不定な人物同士の会話メッセージを作成する際に、
「自分・相手」の呼称や、語尾変化等をサポートするAPIです。

後述のソース中の、第1人称武将番号, 第2人称武将番号 を、様々な武将で試し、
一体どのような概念なのか理解して使いましょう。

男性・女性、上司・部下、年寄と若君主、様々な職業など、考慮されたメッセージへと語句が変化します。

使いどころは「吹き出しのメッセージダイアログ」内でのメッセージ作成

武将や姫の会話がある独自イベントの際のメッセージ構築に利用することがほとんどでしょう。
基本的には、(独り言も含めて)相手が存在するという前提での会話に利用されることでしょう。

話者の2人の関係性が固定的ではないメッセージには、必ず「変格」が必要となる

メッセージは、「相手との関係」「本人の性格」「性別」などによって変化するハズです。

同じメッセージ内容でも、2人の人物関係によって以下のような変化が要求されます。

------------------------------
// 武田晴信 が 武田信繁に言った
信繁、商人に
米を売ろう

ははは、信繁
一度の失敗では
懲りぬようじゃな

おのれ、信繁
覚えておれ!
------------------------------
// 武田信繁 が 武田晴信に言った
兄上、商人に
米を売りましょう

ははは、兄上
一度の失敗では
懲りぬようですな

おのれ、信玄
覚えておれ!
------------------------------
// 柿崎景家 が 上杉謙信に言った
政虎様、商人に
米を売りましょう

わはは、お館様
一度の失敗では
懲りぬようですな

おのれ、くそ坊主
覚えておれ!
------------------------------
// 五徳姫 が 織田信長に言った
父上、商人に
米を売りましょう

うふふ、父上
一度の失敗では
懲りぬようですね

おのれ、信長
覚えておれ!
------------------------------
// 初姫 が 茶々姫
姉上、商人に
米を売りましょう

うふふ、姉上
一度の失敗では
懲りぬようですね

おのれ、茶々
覚えておれ!
------------------------------

これをif文でかき分けるのは非常に大変です。
2人が誰なのかが特定されていなければ、「人物関係」「年齢」「性格」「口調」などまで考慮すると不可能なのではないかといったほどのif文が必要であり、
仮に2人の人物が固定されていたとしても、「現在家臣なのか? 大名なのか、上下関係は?」などと考えると、尊敬語に変化するかどうかなど、
考えることが多くあります。

%相手% や %ははは% など、自動的に変化するメタ語句

メタ語句を上手く利用して、文章を作りましょう。
どのようなメタ語句があるかは「言葉遣い情報型.h」にあります。

先程の例ですと、たった1通りのメタ文章で実現できます。

void 語句変化の実験(int 自分のBushouID, int 相手のBushouID) {

	if (0 <= 自分のBushouID && 自分のBushouID < 最大数::武将情報::配列数 && 0 <= 相手のBushouID && 相手のBushouID < 最大数::武将情報::配列数) {
		string message1 = %相手%(自分のBushouID, 相手のBushouID) + "、商人に\x0A"
			"米を売" + %りましょう%(自分のBushouID, 相手のBushouID);

		string message2 = %ははは%(自分のBushouID, 相手のBushouID) + "、" + %相手%(自分のBushouID, 相手のBushouID) + "\x0A"
			"一度の失敗では\x0A"
			"懲りぬよう" + %です%(自分のBushouID, 相手のBushouID) + %な(2)%(自分のBushouID, 相手のBushouID);

		string message3 = "おのれ、" + %罵倒相手%(自分のBushouID, 相手のBushouID) + "\x0A"
			"覚えておれ!";


		デバッグ出力 << message1 << endl;
		デバッグ出力 << endl;
		デバッグ出力 << message2 << endl;
		デバッグ出力 << endl;
		デバッグ出力 << message3 << endl;
		デバッグ出力 << "------------------------------" << endl;
	}
}

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

	int i1stBushouID = Get_武将番号【配列用】(顔番号::武田晴信); // 武田信玄
	int i2ndBushouID = Get_武将番号【配列用】(顔番号::武田信繁); // 武田信繁
	語句変化の実験(i1stBushouID, i2ndBushouID);

	i1stBushouID = Get_武将番号【配列用】(顔番号::武田信繁); // 武田信繁
	i2ndBushouID = Get_武将番号【配列用】(顔番号::武田晴信); // 武田信玄
	語句変化の実験(i1stBushouID, i2ndBushouID);

	i1stBushouID = Get_武将番号【配列用】(顔番号::柿崎景家); // 柿崎景家
	i2ndBushouID = Get_武将番号【配列用】(顔番号::長尾景虎); // 上杉謙信
	語句変化の実験(i1stBushouID, i2ndBushouID);

	i1stBushouID = Get_武将番号【配列用】(顔番号::織田五徳); // 五徳姫
	i2ndBushouID = Get_武将番号【配列用】(顔番号::織田信長); // 織田信長
	語句変化の実験(i1stBushouID, i2ndBushouID);

	i1stBushouID = Get_武将番号【配列用】(顔番号::浅井初);   // 初姫 
	i2ndBushouID = Get_武将番号【配列用】(顔番号::浅井茶々); // 茶々姫
	語句変化の実験(i1stBushouID, i2ndBushouID);
}
			

吹き出しメッセージで利用してみよう。

主体と客体の武将番号【配列用】を入れ替えながら会話していけば、
自然な語句変化をしながら、互いの会話を成立させることができます。

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

	int 自分のBushouID = Get_武将番号【配列用】(顔番号::織田信長);
	int 相手のBushouID = Get_武将番号【配列用】(顔番号::織田五徳);

	if (0 <= 自分のBushouID && 自分のBushouID < 最大数::武将情報::配列数 && 0 <= 相手のBushouID && 相手のBushouID < 最大数::武将情報::配列数) {
		string message1 = %相手%(自分のBushouID, 相手のBushouID) + "、商人に\x0A"
			"米を売" + %りましょう%(自分のBushouID, 相手のBushouID);

		噴出ダイアログ《通常・左上》開始(自分のBushouID, message1);

		// 主格と客体を入れ替え得る
		自分のBushouID = Get_武将番号【配列用】(顔番号::織田五徳);
		相手のBushouID = Get_武将番号【配列用】(顔番号::織田信長);

		string message2 = %ははは%(自分のBushouID, 相手のBushouID) + "、" + %相手%(自分のBushouID, 相手のBushouID) + "\x0A"
			"一度の失敗では\x0A"
			"懲りぬよう" + %です%(自分のBushouID, 相手のBushouID) + %な(2)%(自分のBushouID, 相手のBushouID);

		噴出ダイアログ《通常・右下》開始(自分のBushouID, message2);
		噴出ダイアログ《通常・右下》終了();

		噴出ダイアログ《通常・左上》終了();
	}
}

特定の相手が居ない独り言の場合は?

独り言の場合は、第1引数と第2引数に両方に当人の「武将番号【配列用】」を入れる。

自分を相手に語りかければ、独り言に近い状態となります。

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

「語句変化」に関する主な所は以上となります。 詳しくは「言葉遣い情報型.h」などを参照してください。