LoginSignup
3
0

More than 1 year has passed since last update.

お疲れ様です。たなしょです。
今日はカノジョの原型となるモデルを作成しました。
ようやく第一歩ですね。

完成したもの

image.png
まだ「おはよう」などのあいさつを返すことはできませんが、一方向のコミュニケーションは取れます。
画像は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メソッド呼ばれて受け答えの処理が実行されます。
そして左端のプロンプトに会話内容を出力します。

最後に

今日はカノジョの原型を作成しました。
まだ一方向のコミュニケーションしか取れませんが、これからある程度会話のキャッチボールができるように改良していきたいです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0