【FlowScript講座】第2回 Hello Miku Again
作成日時 2013-05-26 17:21:10 更新日時 2013-05-26 17:23:05【前々回の後】
ミク「はじめまして、ミクです。あなたのお名前は?」
KHCmaster
ミク「KHCmasterさんですね、よろしくお願いします。」
.
.
.
ミク「はじめまして、ミクです。あなたのお名前は?」
KHCmaster
ミク「KHCmasterさんですね、よろしくお願いします。」
.
.
.
ミク「はじめまして、ミクです。あなたのお名前は?」
宇和ああああああああああ
ミク「宇和ああああああああああさんですね、よろしくお願いします。」
-------------------------------------------------------------------------------------------------------------
KHCmaster君にミクさんと会話できるスクリプトを書いてあげたのですが、何回か使った後に発狂してしまいました。
その原因として考えられるのが、毎回同じ会話(発言)しかしないということが挙げられます。
そこで今回は、条件分岐などを使用して入力に応じた内容を返すことにしてみたいと思います。
まず、仕様を考えます。
ミクさんが最初に挨拶をしてくれることに変わりはないのですが、挨拶の仕方にバリエーションを持たせて見ましょう。
・ミク「はじめまして、ミクです。あなたのお名前は?」
・ミク「はじめまして、ミクです。お名前を教えてください。」
のいずれか一つを出力するようにしましょう。
乱数と条件分岐を使えばできるのですが、FlowScriptにはそれを簡単に行うためのノードが用意されているのでそれを使います。
Random.TriggerというノードはInが実行されると、Out0~Out6がその実行のたびにランダムにいずれか一つが実行されます。
今回は2つのConsole.WriteLineを使い、ミクさんが2つの挨拶のいずれかを行うようにします。

こんな感じですね。
何回か実行してみるとランダムに挨拶するのが分かると思います。
次は、名前の入力を受けるノードなのでConsole.ReadLineを使います。
で、名前の入力を受けてミクさんが返答するのですが、さきほど同様に返答内容にバリエーションを持たせて見ましょう。
・ミク「xxxさんですね、よろしくお願いします。」
・ミク「よろしくお願いします、xxxさん。」
の2つの返答の仕方を用意します。Random.Trigger, Logic.Sequential, Console.Write, Console.WriteLineを使い実装します。

こんな感じですね。
さて、今回は名前を聞くだけではなく仕事の話もするようにしましょう。ここでも質問の仕方にバリエーションを持たせて
・ミク「お仕事は何をされていますか?」
・ミク「どんなお仕事をされていますか?」
と2つの聞き方を用意します。
そして、入力を待ちます。

(見やすいようにノードの配置を少し変えました。見にくい場合は適当に移動させて見やすいようにしましょう。)
仕事について、聞いた後に仕事内容について条件分岐で返答するようにしてみます。
ここでは
無職という単語が含まれる場合
・ミク「……」
含まれない場合
・ミク「yyyのお仕事をされているんですね、素敵です。」
と無職には厳しい返答をするようにしてみます。
まずは、条件分岐で真の場合と偽の場合で別々のことを行うノードを追加します。
Logic.IfというノードはInが実行されるとConditionという条件(真 or 偽)を調べて、真の場合にはOnTrue、偽の場合にはOnFalseを実行するノードです。
これを使うと条件分岐が可能です。
さらに、条件の部分を与えるノードですが、今回はString.Containsというノードを使います。
このノードはAとBに文字列を受け取って、AにBという文字列が含まれている場合、Value=真となり、そうでない場合はValue=偽となるノードです。
たとえば、A=hoge,B=hoのときValueは真になりますが、A=hoge,B=hiのときValueは偽になります。
今回は入力された仕事に無職という文字列が含まれる場合は無職とみなすので
Aに入力された仕事(Console.ReadLineのValue)、Bにプロパティとして無職と入れます。
最後にString.ContainsのValueをLogic.IfのConditionに繋ぎます。
これで条件分岐の部分が完成です。あとは無職かどうかに応じて出力を変えるだけです。

こんな感じになります。
早速実行してみましょう。
無職以外の職業だと

となり、
無職だと

となります。
これを機にKHCmaster君に職が見つかるといいですね。
今回のまとめですが
・Random.Triggerでランダムに実行を行える
・Logic.Ifで条件分岐を行える
・String.Containsで部分文字列を含むかどうか調べることができる
となっています。
今回の講座に関する質問はこのスレッドで受け付けています。
次回は数値計算と条件分岐についてより詳しく行う予定です。
ミク「はじめまして、ミクです。あなたのお名前は?」
KHCmaster
ミク「KHCmasterさんですね、よろしくお願いします。」
.
.
.
ミク「はじめまして、ミクです。あなたのお名前は?」
KHCmaster
ミク「KHCmasterさんですね、よろしくお願いします。」
.
.
.
ミク「はじめまして、ミクです。あなたのお名前は?」
宇和ああああああああああ
ミク「宇和ああああああああああさんですね、よろしくお願いします。」
-------------------------------------------------------------------------------------------------------------
KHCmaster君にミクさんと会話できるスクリプトを書いてあげたのですが、何回か使った後に発狂してしまいました。
その原因として考えられるのが、毎回同じ会話(発言)しかしないということが挙げられます。
そこで今回は、条件分岐などを使用して入力に応じた内容を返すことにしてみたいと思います。
まず、仕様を考えます。
ミクさんが最初に挨拶をしてくれることに変わりはないのですが、挨拶の仕方にバリエーションを持たせて見ましょう。
・ミク「はじめまして、ミクです。あなたのお名前は?」
・ミク「はじめまして、ミクです。お名前を教えてください。」
のいずれか一つを出力するようにしましょう。
乱数と条件分岐を使えばできるのですが、FlowScriptにはそれを簡単に行うためのノードが用意されているのでそれを使います。
Random.TriggerというノードはInが実行されると、Out0~Out6がその実行のたびにランダムにいずれか一つが実行されます。
今回は2つのConsole.WriteLineを使い、ミクさんが2つの挨拶のいずれかを行うようにします。
こんな感じですね。
何回か実行してみるとランダムに挨拶するのが分かると思います。
次は、名前の入力を受けるノードなのでConsole.ReadLineを使います。
で、名前の入力を受けてミクさんが返答するのですが、さきほど同様に返答内容にバリエーションを持たせて見ましょう。
・ミク「xxxさんですね、よろしくお願いします。」
・ミク「よろしくお願いします、xxxさん。」
の2つの返答の仕方を用意します。Random.Trigger, Logic.Sequential, Console.Write, Console.WriteLineを使い実装します。
こんな感じですね。
さて、今回は名前を聞くだけではなく仕事の話もするようにしましょう。ここでも質問の仕方にバリエーションを持たせて
・ミク「お仕事は何をされていますか?」
・ミク「どんなお仕事をされていますか?」
と2つの聞き方を用意します。
そして、入力を待ちます。
(見やすいようにノードの配置を少し変えました。見にくい場合は適当に移動させて見やすいようにしましょう。)
仕事について、聞いた後に仕事内容について条件分岐で返答するようにしてみます。
ここでは
無職という単語が含まれる場合
・ミク「……」
含まれない場合
・ミク「yyyのお仕事をされているんですね、素敵です。」
と無職には厳しい返答をするようにしてみます。
まずは、条件分岐で真の場合と偽の場合で別々のことを行うノードを追加します。
Logic.IfというノードはInが実行されるとConditionという条件(真 or 偽)を調べて、真の場合にはOnTrue、偽の場合にはOnFalseを実行するノードです。
これを使うと条件分岐が可能です。
さらに、条件の部分を与えるノードですが、今回はString.Containsというノードを使います。
このノードはAとBに文字列を受け取って、AにBという文字列が含まれている場合、Value=真となり、そうでない場合はValue=偽となるノードです。
たとえば、A=hoge,B=hoのときValueは真になりますが、A=hoge,B=hiのときValueは偽になります。
今回は入力された仕事に無職という文字列が含まれる場合は無職とみなすので
Aに入力された仕事(Console.ReadLineのValue)、Bにプロパティとして無職と入れます。
最後にString.ContainsのValueをLogic.IfのConditionに繋ぎます。
これで条件分岐の部分が完成です。あとは無職かどうかに応じて出力を変えるだけです。
こんな感じになります。
早速実行してみましょう。
無職以外の職業だと
となり、
無職だと
となります。
これを機にKHCmaster君に職が見つかるといいですね。
今回のまとめですが
・Random.Triggerでランダムに実行を行える
・Logic.Ifで条件分岐を行える
・String.Containsで部分文字列を含むかどうか調べることができる
となっています。
今回の講座に関する質問はこのスレッドで受け付けています。
次回は数値計算と条件分岐についてより詳しく行う予定です。
- 0.png (ID: 33)
- 1.png (ID: 34)
- 2.png (ID: 35)
- 3.png (ID: 36)
- 4.png (ID: 37)
- 5.png (ID: 38)
- hello_miku_again.fsml (ID: 39)
FlowScript講座をフォーラムを使って開講中です。