Build a Typing Master Game in C#

This is a basic typing game concept. The form will display random letters. If the player types one of them, it disappears and the accuracy rate goes up. If the player types an incorrect letter, the accuracy rate goes down. As the player keeps typing letters, the game goes faster and faster, getting more difficult with each correct letter. If the form fills up with letters, the game is over!





DIRECT DOWNLOAD CODE FOR THIS PROGRAM HERE

Set up the Timer control:
Did you notice how your Timer control didn’t show up on your form? That’s because the Timer is a non-visual control. It doesn’t actually change the look and feel of the form. It does exactly one thing: it calls a method over and over again. Set the Timer control’s Interval property to 800, so that it calls its method every 800 milliseconds. Then double-click on the timer1 icon in the designer. The IDE will do what it always does when you double-click on a control: it will add a method to your form. This time, it’ll add one called timer1_Tick. Here’s the code for it:

private void timer1_Tick(object sender, EventArgs e)

{
    // Add a random key to the ListBox
    listBox1.Items.Add((Keys)random.Next(65, 90));
    if (listBox1.Items.Count > 7)
    {
        listBox1.Items.Clear();
        listBox1.Items.Add(“Game over”);
        timer1.Stop();
    }
}

Add a class to keep track of the player stats. If the form is going to display the total number of keys the player pressed, the number that were missed and the number that were correct, and the player’s accuracy, then we’ll need a way to keep track of all that data. Sounds like a job for a new class! Add a class called Stats to your project. It’ll have four int fields called Total, Missed, Correct, and Accuracy, and a method called Update with one bool parameter: true if the player typed a correct letter that was in the ListBox, or false if the player missed one.

Create Stats:  Total    Missed    Correct   Accuracy   Update()
class Stats
{
    public int Total = 0;
    public int Missed = 0;
    public int Correct = 0;
    public int Accuracy = 0;
    public void Update(bool correctKey)
    {
       Total++;
       if (!correctKey)
        {
            Missed++;
        }
        else
        {
            Correct++;
        }
        Accuracy = 100 * Correct / (Missed + Correct);
    }
}

Add fields to your form to hold a Stats object and a Random object. You’ll need an instance of your new Stats class to actually store the information, so add a field called stats to store it. And you already saw that you’ll need a field called random—it’ll contain a Random object. Add the two fields to the top of your form:

public partial class Form1 : Form
{
Random random = new Random();
Stats stats = new Stats();
...

Handle the keystrokes.
There’s one last thing your game needs to do: any time the player hits a key, it needs to check if that key is correct (and remove the letter from the ListBox if it is), and update the stats on the StatusStrip. Go back to the form designer and select the form. Then go to the Properties window and click on the lightning bolt  button. Scroll to the KeyDown row and double-click on it. This tells the IDE to add a method called Form1_KeyDown() that gets called every time the user presses a key. Here’s the code for the method:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    // If the user pressed a key that's in the ListBox, remove it
    // and then make the game a little faster
    if (listBox1.Items.Contains(e.KeyCode))
    {
        listBox1.Items.Remove(e.KeyCode);
        listBox1.Refresh();
        if (timer1.Interval > 400)
        timer1.Interval -= 10;
        if (timer1.Interval > 250)
        timer1.Interval -= 7;
        if (timer1.Interval > 100)
        timer1.Interval -= 2;
        difficultyProgressBar.Value = 800 - timer1.Interval;
        // The user pressed a correct key, so update the Stats object
        // by calling its Update() method with the argument true
        stats.Update(true);
    }
    else
    {
        // The user pressed an incorrect key, so update the Stats object
        // by calling its Update() method with the argument false
        stats.Update(false);
    }
        // Update the labels on the StatusStrip
        correctLabel.Text = "Correct: " + stats.Correct;
        missedLabel.Text = "Missed: " + stats.Missed;
        totalLabel.Text = "Total: " + stats.Total;
        accuracyLabel.Text = "Accuracy: " + stats.Accuracy + "%";
}

Run your game.
Your game’s done! Give it a shot and see how well you do. You may need to adjust the font size of the ListBox to make sure it holds exactly 7 letters, and you can change the difficulty by adjusting the values that
are subtracted from timer1.Interval in the Form1_KeyDown() method.

DIRECT DOWNLOAD CODE FOR THIS PROGRAM HERE