お疲れ様です。たなしょです。
今日はカノジョの原型となるモデルを作成しました。
ようやく第一歩ですね。
##完成したもの
まだ「おはよう」などのあいさつを返すことはできませんが、一方向のコミュニケーションは取れます。
画像はillustACさんから拝借しました。(かわいい!)
##カノジョのなかみ
/// <summary>
/// RandomResponderまたはRepeatResponderを
/// ランダムに選択して応答メッセージを返す
/// </summary>
/// <param name="input">ユーザ-の発信</param>
/// <returns>応答メッセージ</returns>
public string Dialogue(string input) {
Random rnd = new Random();
int num = rnd.Next(0, 10);
if (num < 6)
{
_responder = _res_random;
}
else
{
_responder = _res_repeat;
}
return _responder.Response(input);
}
このDialogueメソッドがカノジョの心臓部分です。
Random関数でランダムな数値(0~9)を生成します。
6より小さい場合ランダムなことを返して、6以上なら入力した文字と同じ文字を出力します。(オウム返しな受け答え)
ランダムな受け答えのなかみ
class RandomResponder : Responder
{
private string[] _responses =
{
"めっちゃいい天気!",
"確かにそうだね",
"10円拾った",
"じゃあこれ知ってる?",
"それねー",
"それかわいい♪"
};
/*~中略~*/
// Response method
public override string Response(string input)
{
Random rnd = new();
return _responses[rnd.Next(0, _responses.Length)];
}
}
0~5までの要素に書く文字列を格納しています。
Responseメソッドが呼ばれるとランダムで0~5までの数値を生成して配列の中身を参照しています。
オウム返しのなかみ
class RepeatResponder : Responder
{
/* 中略 */
// Response Method
public override string Response(string input)
{
return String.Format("{0}ってなに?", input);
}
}
オウム返しなので単純に引数をもってきて「ってなに?」の文字列と合わせて、
合成した文字列を返却しているだけです。
「話す」を押したときのうごき
private void button1_Click(object sender, EventArgs e)
{
string value = textBox1.Text;
if (string.IsNullOrEmpty(value))
{
label1.Text = "なに?";
}
else
{
string response = _chan.Dialogue(value);
label1.Text = response;
PutLog("> " + value);
PutLog(Prompt() + response);
textBox1.Clear();
}
}
テキストボックスに何も入力せず「話す」ボタンを押すと「なに?」が表示されます。
テキストボックスに何か入力されている状態で「話す」ボタンを押すと、Dialogueメソッド呼ばれて受け答えの処理が実行されます。
そして左端のプロンプトに会話内容を出力します。
最後に
今日はカノジョの原型を作成しました。
まだ一方向のコミュニケーションしか取れませんが、これからある程度会話のキャッチボールができるように改良していきたいです。