Игра «Печатная машинка» на С#

Всем привет, сегодня мы напишем игрушку, суть следующая:

  1. В форме будут появляться случайные буквы.
  2. Если игрок вводит буквы правильно, они исчезают — уровень растет и буквы появляются все чаще.
  3. Если вся форма заполнена буквами игра окончена.

Кому лень читать(ниже), могут сразу скачать проект [download-attachment id=»431″ title=»WinFormsApp_HitTheKey»]

Итак, начнем…

Создаем WinForm проект назовем его WinFormApp_HitTheKeys.
1) для свойств формы выставляем следующие значения:
FormBorderStyle=Fixed3D
Size=876;174
Text=Hit the keys!
KeyPreview=true;
2) Перетаскиваем на форму элемент ListBox, для этого элемента нужно выставить следующие св-ва:
Dock=Fill;
MultiColumn=True;
Font Size=72

3) Теперь перетаскиваем на форму элемент Timer
4) Далее, двойным нажатием по элементу StatusStrip в панели элементов, добавим его к форме. Св-ва:
SizingGrip=False;
5) Добавляем в элемент StatusStrip 4 метки StatusLabel

6) Для 1 метки выставляем следующие св-ва:
Name=correctLabel;
Text=Correct: 0;
7) Для 2 метки выставляем след. св-ва:
Name=missedLabel;
Text=Missed: 0;
8) Для 3 метки выставляем след. св-ва:
Name=totalLabel;
Text=Total: 0;
9) Для 4 метки выставляем след. св-ва:
Name=accuracyLabel;
Text=Accuracy: 0%;
10) Теперь, добавляем в StatusStrip, еще один StatusLabel, для него след. св-ва:
Spring:True;
TextAlign: MiddleRight;
Text: Difficulty;
11) Далее, добавляем в StatusStrip элемент ProgressBar, он находится там же где StatusLabel, его св-ву Name присваиваем значение difficultyProgressBar, а свойству Maximum=701

Теперь форма должна выглядеть вот так:

12) Теперь переходим к элементу Timer, выберите элемент timer1 и выставьте для него следующие св-ва:
Interval:800;

13) Нажимаем на элемент timer1 два раз левой кнопкой мыши, создается обработчик события Tick. Добавляем следующий код

public partial class Form1 : Form
    {
        //Добавляем экземпляр класса Random, он нам понадобиться для получения слуйчаной буквы.
        Random random = new Random(); 
        public Form1()
        {
            InitializeComponent();
            timer1.Enabled = true; //Делаем таймер активным
            timer1.Start(); //Запускаем таймер 
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            listBox1.Items.Add((Keys)random.Next(65, 90)); //Добавляем в listBox случайную букву.
            if (listBox1.Items.Count > 7) //Если букв больше 7 игра считается оконченной.
            {
                listBox1.Items.Clear(); //Очищаем listBox
                listBox1.Items.Add("Игра окончена!");
                timer1.Stop(); // Останавливаем таймер.
            }
        }
    }

14) Добавляем к проекту новый класс Stats, он нам понадобиться для статистики.


15) Добавляем в него следующий код:

namespace WinFormsApp_HitTheKey
{
    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);
        }
    }
}

16) Теперь, переходим обратно в класс Form1.cs и создаем в нем экземпляр класса Stats

17) Теперь нужно создать обработчик нажатия кнопки пользователем, для этого переходим в конструктор формы, выбираем форму и переходим в события, там ищем событие Key_Down, нажимаем на него 2 раза.

18) Внутри пишем следующий код:

private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            //Если пользователь правильно нажимает клавиши, то буквы удаляются, а скорость их появления увеличивается.
            if (listBox1.Items.Contains(e.KeyCode)) //Проверка на правильность нажатия.
            {
                listBox1.Items.Remove(e.KeyCode); //удаление буквы из listBox`а
                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;//Заполнение ProgressBar`а
                stats.Update(true); //Обновляем статистику.
            }
            else
            {
                stats.Update(false);
            }

            correctLabel.Text = "Correct: " + stats.Correct;
            missedLabel.Text = "Missed " + stats.Missed;
            totalLabel.Text = "Total " + stats.Total;
            accuracyLabel.Text = "Accuracy: " + stats.Accuracy + "%";
        }

19) Запускаем, проверяем!

Если получилось, ставь лайк.

Игра «Печатная машинка» на С#: 6 комментариев

  1. Желательно показывать метод timer1_Tick в самом уроке. Чтобы программа работала, пришлось копировать его из Вашего кода.
    В целом, идея таких — прекрасная.
    Спасибо большое.

  2. посмотрел как делать программу, но не понял как вместо английских букв поставить русские?

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.