WinFormsアプリでプログレスバーを使った主人公のライフ表示

この技術資料は、WinFormsアプリケーションにおいて、プログレスバーを使用してゲームの主人公のライフを視覚的に表示する方法を学ぶためのものです。C#を用いた基本的なWinFormsアプリケーションの構築を通じて、プログレスバーの使い方とイベントハンドリングの基本を理解します。

開発環境

  • IDE: Visual Studio 2022 以降
  • 言語: C#
  • フレームワーク: .NET Framework 4.8 以降 または .NET 6 以降

手順

1. 新しいWinFormsプロジェクトの作成

Visual Studioで新しいWinFormsプロジェクトを作成し、適切な名前(例: LifeProgressBarSample)を付けます。

2. フォームデザインの設定

フォームデザイナーで以下のコントロールを追加します。

  • ProgressBar (progressBarLife)
    • NameprogressBarLife
    • Minimum0
    • Maximum100
    • Value100
  • Button (buttonDamage)
    • NamebuttonDamage
    • Textダメージ

3. コードの実装

以下のコードを Form1.cs に追加します。

using System;
using System.Windows.Forms;

namespace LifeProgressBarSample
{
    public partial class Form1 : Form
    {
        private int playerLife = 100;

        public Form1()
        {
            InitializeComponent();
            InitializeProgressBar();
        }

        private void InitializeProgressBar()
        {
            // プログレスバーの初期設定
            progressBarLife.Minimum = 0;
            progressBarLife.Maximum = 100;
            progressBarLife.Value = playerLife;
            progressBarLife.Step = 10;
            // progressBarLife.Style = ProgressBarStyle.Continuous;   // 伸びをスムーズにする設定
        }

        private void buttonDamage_Click(object sender, EventArgs e)
        {
            // 主人公のライフを減少させる
            if (playerLife > 0)
            {
                playerLife -= 10;
                progressBarLife.Value = playerLife;
            }
            else
            {
                MessageBox.Show("主人公は倒れました!");
            }
        }
    }
}

4. コードの解説

  • playerLife は主人公のライフを表します。初期値は 100 です。
  • InitializeProgressBar メソッドは、プログレスバーの初期設定を行います。
  • buttonDamage_Click メソッドは、ボタンがクリックされたときにライフを減少させ、ライフが 0 以下になるとメッセージボックスを表示します。

5. 実行結果

アプリケーションを実行し、ダメージ ボタンをクリックすると、プログレスバーの値が減少し、主人公のライフが減ります。ライフが 0 になると「主人公は倒れました!」というメッセージが表示されます。

応用

1. ライフ回復機能の追加

ライフを回復させる機能を追加します。新たに「回復」ボタンを追加し、そのクリックイベントでライフを増加させます。

フォームデザインの変更

フォームにもう一つのボタンを追加します。

  • Button (buttonHeal)
    • NamebuttonHeal
    • Text回復

コードの変更

buttonHeal_Click メソッドを追加します。

private void buttonHeal_Click(object sender, EventArgs e)
{
    // 主人公のライフを回復させる
    if (playerLife < 100)
    {
        playerLife += 10;
        if (playerLife > 100)
        {
            playerLife = 100;
        }
        progressBarLife.Value = playerLife;
    }
}

2. ゲームオーバー処理の追加

ライフが 0 になったときに、ゲームオーバーを示す画面や処理を追加します。例えば、ゲームオーバー時にはフォーム上の全てのボタンを無効にする方法があります。

コードの変更

buttonDamage_Click メソッドを次のように変更します。

private void buttonDamage_Click(object sender, EventArgs e)
{
    // 主人公のライフを減少させる
    if (playerLife > 0)
    {
        playerLife -= 10;
        progressBarLife.Value = playerLife;
    }

    if (playerLife <= 0)
    {
        MessageBox.Show("主人公は倒れました!");
        buttonDamage.Enabled = false;
        buttonHeal.Enabled = false;
    }
}

3. 背景色の変化によるライフ表示の強調

ライフが減少するにつれて、プログレスバーの背景色を変化させることで、ライフが危険な状態であることを視覚的に強調することができます。

コードの変更

System.Drawing.Color を使ってプログレスバーの色を変更します。

private void UpdateProgressBarColor()
{
    if (playerLife > 50)
    {
        progressBarLife.ForeColor = System.Drawing.Color.Green;
    }
    else if (playerLife > 20)
    {
        progressBarLife.ForeColor = System.Drawing.Color.Orange;
    }
    else
    {
        progressBarLife.ForeColor = System.Drawing.Color.Red;
    }
}

private void buttonDamage_Click(object sender, EventArgs e)
{
    // 主人公のライフを減少させる
    if (playerLife > 0)
    {
        playerLife -= 10;
        progressBarLife.Value = playerLife;
        UpdateProgressBarColor();
    }

    if (playerLife <= 0)
    {
        MessageBox.Show("主人公は倒れました!");
        buttonDamage.Enabled = false;
        buttonHeal.Enabled = false;
    }
}

private void buttonHeal_Click(object sender, EventArgs e)
{
    // 主人公のライフを回復させる
    if (playerLife < 100)
    {
        playerLife += 10;
        if (playerLife > 100)
        {
            playerLife = 100;
        }
        progressBarLife.Value = playerLife;
        UpdateProgressBarColor();
    }
}

結論

この技術資料の続きでは、WinFormsアプリでプログレスバーを使用したライフシステムの拡張方法を学びました。これにより、よりインタラクティブで視覚的に分かりやすいゲームシステムを構築できます。これらの要素を追加することで、実際のゲーム開発の基礎をしっかりと学ぶことができます。