制限時間内に指定した画像を見つけ出す脳トレーニングアプリを作ろう

2014年1月10日(金)
薬師寺 国安

指定したタイマーの間隔が経過し、タイマーが有効である場合に発生する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回のサンプルプログラムです。
薬師寺国安事務所

薬師寺国安事務所代表。Visual Basic プログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。1997年に薬師寺聖とコラボレーション・ユニット PROJECT KySS を結成。2003年よりフリーになり、PROJECT KySS の活動に本格的に参加、.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。Windows Phoneアプリ開発を経て、現在はWindows ストア アプリを多数公開中

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています