プログラミング演習Ⅲ(2023)

【WPF練習14】壁崩し(8/9)

プロジェクトタイプC# WPFアプリケーション※
プロジェクト名T10b
ソリューション名PET10
ターゲットフレームワーク.NET 6.0 (長期的なサポート)

※ 「WPFアプリ(.NET Framework)」ではないので注意せよ!

注意
  • 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
    • 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
    • プロジェクトの作成作業については準備を参照せよ.

14-8. リセット機能の実装

次にゲームのリセット機能を実装しよう.これは比較的簡単である. 今回はゲームが終了した状態,つまりタイマーが停止している状態で画面をクリックすると, ゲームをリセットして最初から遊べるようにすることにする.

canvas1にはマウスクリック時のイベントは存在しないが,WPFのほとんどの部品は マウスボタンがリリースされたときに発生する MouseUpイベントや, マウスボタンが押下されたときに発生する MouseDownイベントといったイベントを備えている.

今回はcanvas1MouseUpメソッドにイベントハンドラを設定してそこでリセット処理を行うことにする. MainWindow.xamlを編集して,canvas1MouseUpイベントを設定してイベントハンドラに_に示す内容を追記しよう.

MainWindow.xaml.csの追記内容
1
2
3
4
5
6
private void canvas1_MouseUp(object sender, MouseButtonEventArgs e)
{
    if (timer.IsEnabled) return; // タイマーが作動中は何もしない.

    ResetGame(); // ゲームをリセットする.
}

また,ResetGame()メソッドにも少し手を加えよう.ゲームをリセットした際には, 「GAME OVER」や「CLEAR!」といった表示,つまりlabel1を非表示にする必要があるので, そのための処理をResetGame()メソッドに追記しよう._に示す内容を追記する.

MainWindow.xaml.csの追記内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
private void ResetGame() 
{
    Canvas.SetLeft(ball, 250);
    Canvas.SetTop(ball, 685);

    speedX = -5.0 + 10.0 * rand.NextDouble();
    speedY = -(8.0 + 16.0 * rand.NextDouble());

    label1.Visibility = Visibility.Hidden; // label1 を非表示にする.

    SetupLevel();

    timer.Start();
}

ここまで書けたら起動してみよう.ゲームオーバーにするなりゲームクリアするなりしてゲームを終了させてから 画面をクリックしてみよう._に示すように,ゲームがリセットされ最初から遊べるようになることが分かるはずである.

作業結果
Last updated on 2024-01-09
Published on 2024-01-09

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.