承知いたしました。C# (C シャープ) で作成するモグラたたきゲームのデスクトッププログラムの基本的なコード例を以下に示します。このコードは Windows Forms アプリケーションとして作成することを想定しています。
注意: これは基本的な例であり、グラフィックやサウンド、より洗練されたゲームロジックは含まれていません。
まず、Visual Studio などの IDE を使用して新しい Windows Forms アプリケーションプロジェクトを作成してください。
次に、Form1.cs のコードを以下の内容で置き換えます。
C#
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
namespace WhackAMole
{
    public partial class Form1 : Form
    {
        private List<Button> moles;
        private Random random = new Random();
        private int score = 0;
        private Timer gameTimer;
        private int gameDuration = 30; // ゲーム時間 (秒)
        private int timeRemaining;
        private Label scoreLabel;
        private Label timerLabel;
        public Form1()
        {
            InitializeComponent();
            InitializeGame();
        }
        private void InitializeGame()
        {
            // フォームのサイズを設定
            this.ClientSize = new Size(400, 300);
            // スコア表示ラベルの作成
            scoreLabel = new Label();
            scoreLabel.Text = "スコア: 0";
            scoreLabel.Location = new Point(10, 10);
            scoreLabel.AutoSize = true;
            Controls.Add(scoreLabel);
            // タイマー表示ラベルの作成
            timerLabel = new Label();
            timerLabel.Text = "時間: " + gameDuration;
            timerLabel.Location = new Point(10, 30);
            timerLabel.AutoSize = true;
            Controls.Add(timerLabel);
            // モグラボタンのリストを作成
            moles = new List<Button>();
            int moleSize = 50;
            int padding = 10;
            int rows = 3;
            int cols = 3;
            for (int row = 0; row < rows; row++)
            {
                for (int col = 0; col < cols; col++)
                {
                    Button mole = new Button();
                    mole.Size = new Size(moleSize, moleSize);
                    mole.Location = new Point(padding + col * (moleSize + padding), 60 + padding + row * (moleSize + padding));
                    mole.Text = ""; // モグラの表示は画像などにすると良い
                    mole.BackColor = Color.Brown; // モグラの色
                    mole.Click += Mole_Click;
                    moles.Add(mole);
                    Controls.Add(mole);
                }
            }
            // ゲームタイマーの初期化
            gameTimer = new Timer();
            gameTimer.Interval = 1000; // 1秒ごとにイベント発生
            gameTimer.Tick += GameTimer_Tick;
            // ゲームを開始
            StartGame();
        }
        private void StartGame()
        {
            score = 0;
            scoreLabel.Text = "スコア: 0";
            timeRemaining = gameDuration;
            timerLabel.Text = "時間: " + timeRemaining;
            gameTimer.Start();
            ShowRandomMole();
        }
        private async void ShowRandomMole()
        {
            // すべてのモグラを非表示にする
            foreach (var mole in moles)
            {
                mole.Enabled = false; // クリック不可
                mole.BackColor = Color.Brown;
            }
            // ランダムなモグラを選択して表示
            int index = random.Next(moles.Count);
            moles[index].Enabled = true; // クリック可能
            moles[index].BackColor = Color.DarkGray; // 表示されたモグラの色
            // 一定時間後に非表示にする
            await Task.Delay(1500); // 1.5秒表示
            // ゲームが終了していない場合は、再びランダムなモグラを表示
            if (gameTimer.Enabled)
            {
                ShowRandomMole();
            }
        }
        private void Mole_Click(object sender, EventArgs e)
        {
            Button clickedMole = (Button)sender;
            if (clickedMole.BackColor == Color.DarkGray) // 表示されているモグラをクリックした場合
            {
                score++;
                scoreLabel.Text = "スコア: " + score;
                clickedMole.BackColor = Color.Brown; // クリック後は非表示にする
            }
        }
        private void GameTimer_Tick(object sender, EventArgs e)
        {
            timeRemaining--;
            timerLabel.Text = "時間: " + timeRemaining;
            if (timeRemaining <= 0)
            {
                gameTimer.Stop();
                MessageBox.Show($"ゲーム終了!あなたのスコアは {score} です。", "ゲーム終了");
                // 必要であれば、ここでゲームのリスタート処理などを追加
                StartGame(); // デモのため、終了後に再スタート
            }
        }
    }
}
コードの説明:
usingディレクティブ: 必要な名前空間をインポートします。namespace WhackAMole: プロジェクトのネームスペース。public partial class Form1 : Form: Windows Forms の基本となるクラス。- フィールド:
moles: モグラを表すボタンのリスト。random: 乱数ジェネレーター。score: 現在のスコア。gameTimer: ゲームの進行を管理するタイマー。gameDuration: ゲームの制限時間(秒)。timeRemaining: 残り時間。scoreLabel: スコアを表示するラベル。timerLabel: 残り時間を表示するラベル。
 Form1()(コンストラクタ): フォームの初期化とゲームの初期化を行います。InitializeGame():- フォームのサイズを設定します。
 - スコアとタイマーのラベルを作成し、配置します。
 - モグラのボタンをグリッド状に作成し、イベントハンドラー (
Mole_Click) を設定してリストに追加します。 - ゲームタイマーを初期化し、イベントハンドラー (
GameTimer_Tick) を設定します。 StartGame()メソッドを呼び出してゲームを開始します。
StartGame():- スコアをリセットします。
 - 残り時間を初期化します。
 - タイマーを開始します。
 - 最初にランダムなモグラを表示します。
 
ShowRandomMole():- すべてのモグラを一時的に非表示(クリック不可、色を戻す)にします。
 - ランダムなインデックスを選択して、対応するモグラを表示(クリック可能、色を変える)します。
 Task.Delay()を使用して、一定時間後にモグラを再び非表示にします。- ゲームが続いている場合は、再び 
ShowRandomMole()を呼び出します。 
Mole_Click(object sender, EventArgs e):- クリックされたボタンがモグラ(表示されている色)であれば、スコアを増やし、表示を元に戻します。
 
GameTimer_Tick(object sender, EventArgs e):- 残り時間を減らし、タイマーラベルを更新します。
 - 残り時間が 0 になったら、タイマーを停止し、メッセージボックスでゲーム終了を知らせます。その後、デモとしてゲームを再スタートします。
 
使用方法:
- Visual Studio で新しい Windows Forms アプリケーションプロジェクトを作成します。
 - Form1.cs の内容を上記のコードで置き換えます。
 - 必要に応じて、モグラの数、サイズ、配置、ゲーム時間などを調整してください。
 - 実行 (F5 キー) してゲームをプレイします。
 
今後の拡張:
- グラフィックの追加: ボタンの代わりに画像コントロールを使用し、モグラの画像を表示する。
 - サウンドエフェクト: モグラをクリックしたときなどに音を再生する。
 - 難易度調整: モグラの出現頻度や表示時間を変更できるようにする。
 - ハイスコア機能: ハイスコアを保存・表示する。
 - アニメーション: モグラが出たり引っ込んだりするアニメーションを追加する。
 
この基本的なコードを参考に、より面白いモグラたたきゲームを作成してみてください。
0 件のコメント:
コメントを投稿