Всем привет, сегодня мы напишем игрушку, суть следующая:
- В форме будут появляться случайные буквы.
- Если игрок вводит буквы правильно, они исчезают — уровень растет и буквы появляются все чаще.
- Если вся форма заполнена буквами игра окончена.
Кому лень читать(ниже), могут сразу скачать проект [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) Запускаем, проверяем!
Если получилось, ставь лайк.
Желательно показывать метод timer1_Tick в самом уроке. Чтобы программа работала, пришлось копировать его из Вашего кода.
В целом, идея таких — прекрасная.
Спасибо большое.
Спасибо за теплые слова.
ПОДСКАЖИТЕ ПОЖАЛУЙСТА, КАК ВМЕСТО БУКВ СДЕЛАТЬ СЛОВА???
Приветствую,
в ближайшее время сделаю, «Печатную машинку» 2.0
посмотрел как делать программу, но не понял как вместо английских букв поставить русские?
Добрый день,
почитайте вот здесь.
https://www.cyberforum.ru/windows-forms/thread1499998.html
+ как вариант можно написать свой enum по аналогии с Keys Enum
https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.forms.keys?view=netframework-4.8