モグラ叩き兼タイピング練習ソフトを作ります。

モグラはキーボードのキーの位置に対応する位置に文字とともに現れます。そしてキーを押すと消滅します。

リソース

ではまずモグラを表示させるためのクラスを作成しましょう。

モグラは文字に合わせて出現場所が変わります。文字は乱数で決めますが、直接文字を指定して生成することもできるようにコンストラクタは2種類つくります。キーボード上のキーの位置とあわせていますが、上と左に少しスペースを空けたいので、その値をFieldクラスの静的フィールド変数で定義しておきます。

Moguraクラスのフィールド変数とコンストラクタは以下のとおり。

GetPos(string str)は、文字からモグラの表示位置を求めるメソッドです。

GetString(Random random)は、乱数から文字を取得し、モグラの表示位置も同時に求めるメソッドです。

文字が決定したら、次にモグラと文字を合成したビットマップイメージを作成します。このときに最終的な表示位置を確定させます。

以下は、モグラの最終的な表示位置、ビットマップイメージ、同時に表示させる文字列を取得するためのプロパティです。

Dispose()は、いらなくなったオブジェクトを破棄するためのメソッドです。

モグラを叩くためのピコピコハンマーを表示させるためのクラスも作成します。

フィールド変数は以下のとおりです。

コンストラクタ内でリソースからハンマーのビットマップイメージを生成します。それから渡された文字列からどの位置にハンマーを表示させるのかも計算します。そしてプロパティで取得できるようにします。

以下は、ハンマーの最終的な表示位置、ビットマップイメージを取得するためのプロパティです。

Dispose()は、いらなくなったオブジェクトを破棄するためのメソッドです。

あとはこれらを使ってアプリケーションを作成します。ためしにすべてのモグラを表示させてみます。

試運転はうまくいったので、実際にモグラを一体ずつ出して叩いていくことにします。

フィールド変数とコンストラクタは以下のとおりです。コンストラクタ内で背景を黒にして、乱数とタイマーの初期化をしています。

以下はモグラが顔を出しているか、ハンマーが存在するかを示すプロパティです。

Tickイベントが発生したら乱数オブジェクトをMoguraクラスのコンストラクタに渡してモグラを生成します。

キーが押されたら対応する部分にハンマーを表示します。そしてその位置にモグラがいたら(Moguraオブジェクトがが存在し、e.KeyChar.ToString() と Mogura.String が一致していたら)モグラを消滅させるために Mogura = null;としてInvalidate()を実行します(空振りでもハンマーを表示させる必要があるので Invalidate()の実行は必要)。

キーが離されたらハンマーは消滅します。

最後に描画のためのOnPaint(PaintEventArgs e)を示します。MoguraオブジェクトとHammerオブジェクトが存在するのであれば描画します。一応、モグラ叩きゲームの原形部分は完成です。