【C#】記憶力テスト(Step4:キッチンタイマーを作りろう)

スポンサーリンク


子供の知育の為に、記憶力テストができるアプリケーションを作ってみよう。Step4です。

【仕様】
3x3の格子状に9つの絵を表示。
10秒後に非表示。
紙に覚えている限り書く。
答え合わせをする為に答えを表示する。

前回(Step3)は、

スレッドを使って、Sleep処理を並行処理させました。

今回(Step4)は、

暗記時間の残りを表示できるようにしましょう。

残りの覚える時間の表示は、世の中の商品でいうとキッチンタイマーの事です。

最後に、覚える時間を変更できるようにしましょう。(10秒を変更可能にする)

復習(3つ表示を9つ表示にする)

Step2で行った被らずにランダム表示ですが、同じ要領で9つ表示させましょう。

今回は画像を22個とってきました。

最近ハマっているピクトグラムを使います。

<<https://icooon-mono.com/>>

上記サイトからダウンロードしました。

まずは、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に変化を与えるときは、同期処理だよと明示する必要がある。

次回が最後です。

非表示にした画像を答え合わせの為に表示させましょう。

コメント

タイトルとURLをコピーしました