子供の知育の為に、記憶力テストができるアプリケーションを作ってみよう。Step4です。
【仕様】
3x3の格子状に9つの絵を表示。
10秒後に非表示。
紙に覚えている限り書く。
答え合わせをする為に答えを表示する。
前回(Step3)は、
スレッドを使って、Sleep処理を並行処理させました。
今回(Step4)は、
暗記時間の残りを表示できるようにしましょう。
残りの覚える時間の表示は、世の中の商品でいうとキッチンタイマーの事です。
最後に、覚える時間を変更できるようにしましょう。(10秒を変更可能にする)
復習(3つ表示を9つ表示にする)
Step2で行った被らずにランダム表示ですが、同じ要領で9つ表示させましょう。
今回は画像を22個とってきました。
最近ハマっているピクトグラムを使います。
上記サイトからダウンロードしました。
まずは、GUIにピクチャーボックスを9つ設置します。
画像のファイル名もピクチャーボックスの名前も命名規則に通りに名付けます。
前回は、画像数とピクチャーボックスの数が同じだったので定義を変えます。
そして、画像は実行ファイルに組み込んでいるので、読み込みましょう。
ここは繰り返し数が変わっているだけで、大きな変更はありません。
次は、画像の表示部です。
基本変数の部分が変わっただけで、ロジックは同じです。
では、次から本題です。
キッチンタイマーの考え
キッチンタイマーって知ってますか?
【料理など使われるもので、時間をセットすると、セットされた時間になったら知らせる。】
その為、今回必要な流れは下記のようになります。
①セットした時間(今回は10秒) ②開始から経過時間(ストップウォッチ[Stopwatch]クラスから経過時間を取得) ③セットした時間から経過時間を引く ④0秒になったら(0秒以下)になったら、お知らせする
ではさっそく作ってみましょう。
キッチンタイマーを作る
まずは、Step3で作った10秒のウェイトの関数を作り変えます。
いきなりがっつりで驚きましたか?
tmという変数に10秒を設定します(10,000msec)
ストップウォッチを使うよ~と定義して、ストップウォッチ開始。(以下、swという名前)
swの経過時間は、ElapsedMillisecondsで取得します(単位はmsec)
スレッド中は、GUIに変化を与える場合は注意が必要です。
MethodInvoke [関数名] = delegate { (処理) }; Invoke([関数名])
並列処理を行っている時は、非同期処理であり、
GUIに変化を与えるときは、同期処理に戻す必要があります。
この処理は、同期処理だよ~!!って明示する必要があります。
最後に気にするのは、繰り返しを抜ける条件です。
0秒になったら繰り返しは終わってほしいのですが、
0秒ピッタリで終わる保証はどこにもありません。
その為、繰り返しを抜ける条件は、確実に繰り返しを抜けるために
《0秒より少ない時》としましょう。
キッチンタイマーの時間を可変にする
まずはGUIにnumericUpDownを使いましょう。
numericUpDownを使う理由は、手軽に数字のみの入力制限をかける事ができるからです。
Name:numTImer Maximum:30 Minimum:1 Value:10
あとは、取得するだけです。
これは、その時のnumTimerのValueが何かを取得して、
その時間の間、キッチンタイマーを実行するだけです。
まとめ
キッチンタイマーを作るときは、ストップウォッチ(Stopwatch)クラスを使うと便利。
スレッドの処理でGUIに変化を与えるときは、同期処理だよと明示する必要がある。
次回が最後です。
非表示にした画像を答え合わせの為に表示させましょう。
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント