制限時間内に指定した画像を見つけ出す脳トレーニングアプリを作ろう
指定したタイマーの間隔が経過し、タイマーが有効である場合に発生するTickイベント処理
まだ、指定された画像を選択しないで、うろうろ(-_-;)している場合は、秒数がだんだん減っていきます。そして、秒数が0になったらキャラクターが「時間切れです。」と喋ります。タイマーを停止し、ComboBox1の選択を可能にし、選択されていた項目を初期化します。
Private Sub myTimer_Tick() If SelectImage = String.Empty AndAlso myCount <= _second Then _second -= 1 myCount += 1 timeTextBlock.Text = "残り" & _second & "秒" Else If _second = 0 Then _second = 0 readingText = "時間切れです。" syokoVoice() myTimer.Stop() ComboBox1.IsEnabled = True ComboBox1.SelectedIndex = -1 Exit Sub End If _second -= 1 timeTextBlock.Text = "残り" & _second & "秒" End If End Sub
ランダムに並んでいる数字を選択した時の処理
メンバー変数SelectImageに、GridView1から選択された項目を、ImageInfoクラスにキャストして、その「画像名」プロパティの値を取得して格納しておきます。
メンバー変数_imageにはImage1のTagプロパティに指定していた画像のURLを格納します。
30枚の中の選択された画像と、メンバー変数_Imageが格納している画像が同じで、且つ、時間内であれば、キャラクターに「おめでとう。正解です。」と喋らせ、GridView1内をクリアします。messageTextBlockも表示させて、同じ内容を表示させます。
選択した画像が間違っていた場合は、「残念。不正解です。」と喋らせ、表示させます。
選択した画像は合ってはいるが、時間切れの場合は、「惜しい。時間切れです。」と喋らせ表示させます。
Private Sub GridView1_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles GridView1.SelectionChanged Try SelectImage = DirectCast(GridView1.SelectedItem, ImageInfo).画像名 _Image = DirectCast(Image1, Image).Tag If SelectImage.Equals(_Image) AndAlso myCount <= _second Then ComboBox1.IsEnabled = True ComboBox1.SelectedIndex = -1 myTimer.Stop() mySecond = 0 _second = 0 readingText = "おめでとう。正解です。" myCount = 0 SelectImage = String.Empty GridView1.ItemsSource = Nothing messageTextBlock.Visibility = Windows.UI.Xaml.Visibility.Visible messageTextBlock.Text = readingText syokoVoice() ElseIf Not SelectImage.Equals(_Image) Then ComboBox1.IsEnabled = True ComboBox1.SelectedIndex = -1 myTimer.Stop() mySecond = 0 _second = 0 readingText = "残念。不正解です。" myCount = 0 SelectImage = String.Empty GridView1.ItemsSource = Nothing messageTextBlock.Visibility = Windows.UI.Xaml.Visibility.Visible messageTextBlock.Text = readingText syokoVoice() ElseIf SelectImage.Equals(_Image) AndAlso myCount > _second Then ComboBox1.IsEnabled = True ComboBox1.SelectedIndex = -1 myTimer.Stop() mySecond = 0 _second = 0 readingText = "惜しい。時間切れです。" myCount = 0 SelectImage = String.Empty GridView1.ItemsSource = Nothing messageTextBlock.Visibility = Windows.UI.Xaml.Visibility.Visible messageTextBlock.Text = readingText syokoVoice() End If Catch Exit Sub End Try End Sub
結果をキャラクターが音声で喋る処理
MediaElement型のmyMedia変数を宣言し、syokoMediaElementで初期化しておきます。
音声機能へのアクセスを提供する、新しいSpeechSynthesizerのインスタンス、synthオブジェクトを作成します。
SynthesizeTextToStreamAsyncメソッドで、指定した文字列から、音声出力を非同期に生成します。
SetSourceメソッドで、指定されたストリームおよびMIME型を使用してSourceプロパティを設定します。Playメソッドで音声を再生します。
音声にどんな言語で、どのような声で喋らすかは、SpeechSynthesizerのVoiceプロパティで参照できます。下記のURLを参照してください。
> SpeechSynthesizer.Voice | voice property
上記URLを見るとJapanese JA は性別が「Female」で、名前は「Haruka」という女性が読み上げるようです。
非同期処理で行われるため、メソッドの先頭にAsyncを追加します。
Private Async Function syokoVoice() As Task Dim myMedia As MediaElement = Me.syokoMediaElement Dim synth = New Windows.Media.SpeechSynthesis.SpeechSynthesizer Dim stream = Await synth.SynthesizeTextToStreamAsync(readingText) myMedia.SetSource(stream, stream.ContentType) myMedia.Play() End Function
今回はここまでです。それでは、次回の記事をお楽しみに。
制限時間内に指定した画像を見つけ出す脳トレーニングアプリ
『Windows 8.1+Visual Studio 2013によるWindows ストア・アプリ開発実例集』 第2回のサンプルプログラムです。