【Winform】タイピングゲームのチュートリアル

このチュートリアルでは、C#とWinFormを使ってシンプルなタイピングゲームを作成します。プレイヤーは画面に表示された単語をできるだけ早く正確に入力することを目指します。このプロジェクトを通じて、タイマーの使い方、テキスト入力の処理、スコア計算、ファイル保存など、プログラミングの基本的なスキルを楽しく身につけることができます。

1. プロジェクトのセットアップ

  1. Visual Studio を開き、新しい「Windows フォームアプリケーション (.NET Framework)」プロジェクトを作成します。
  2. プロジェクト名を「TypingGame」にします。
  3. Form1の名前をGameFormに変更し、Textプロパティを「タイピングゲーム」に設定します。

2. 基本的なUIの配置

  1. Label をフォームの上部に配置し、NamewordLabelに、Textを空に設定します。このラベルにはプレイヤーが入力すべき単語が表示されます。
  2. TextBox をフォームの中央に配置し、NameinputTextBoxに設定します。このテキストボックスはプレイヤーが単語を入力するために使用します。
  3. Button をフォームの下部に配置し、NamestartButtonに、Textを「スタート」に設定します。ゲームの開始ボタンです。
  4. Label をフォームの右上に配置し、NamescoreLabelに、Textを「スコア: 0」に設定します。スコアを表示します。

3. 単語リストとランダム選択

次に、タイピング対象となる単語のリストを用意し、ゲーム開始時にランダムに選択します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace TypingGame
{
    public partial class GameForm : Form
    {
        private List<string> words;
        private Random random;
        private int score;
        private Timer gameTimer;
        private int timeLeft;

        public GameForm()
        {
            InitializeComponent();
            InitializeGame();
        }

        private void InitializeGame()
        {
            words = new List<string> { "apple", "banana", "cherry", "date", "elderberry", "fig", "grape", "honeydew" };
            random = new Random();
            score = 0;
            timeLeft = 60; // 60秒のタイマー

            gameTimer = new Timer();
            gameTimer.Interval = 1000; // 1秒
            gameTimer.Tick += GameTimer_Tick;

            UpdateWord();
        }

        private void UpdateWord()
        {
            int index = random.Next(words.Count);
            wordLabel.Text = words[index];
            inputTextBox.Clear();
            inputTextBox.Focus();
        }

        private void startButton_Click(object sender, EventArgs e)
        {
            startButton.Enabled = false;
            gameTimer.Start();
        }

        private void inputTextBox_TextChanged(object sender, EventArgs e)
        {
            if (inputTextBox.Text == wordLabel.Text)
            {
                score++;
                scoreLabel.Text = "スコア: " + score;
                UpdateWord();
            }
        }

        private void GameTimer_Tick(object sender, EventArgs e)
        {
            timeLeft--;
            if (timeLeft <= 0)
            {
                gameTimer.Stop();
                MessageBox.Show("ゲーム終了!あなたのスコアは: " + score);
                startButton.Enabled = true;
            }
        }
    }
}

4. ゲームロジックの実装

上記のコードでは、入力された単語が正しいかどうかをリアルタイムで確認し、正しければスコアを更新し、次の単語を表示します。また、ゲームが始まると60秒のカウントダウンが始まり、終了後にスコアが表示されます。

5. タイマー機能の追加

Timerコントロールを使い、ゲーム開始時にカウントダウンを開始し、時間が経過するたびに残り時間を減らしていく機能を追加します。

6. スコアの保存(オプション)

このステップでは、最高スコアをファイルに保存し、次回のゲーム開始時に読み込む機能を追加できます。

まとめ

このタイピングゲームのチュートリアルは、初学者に基本的なプログラミング技術を学ばせながら、タイマーやイベント処理、ランダム化の方法を楽しみながら習得できるように設計されています。