Модификация приложения Windows Forms : вкладка «Дождик»
Последняя вкладка будет вызывать дождь. Внутри вкладки. Опять же, как и в случае с часами и огнём, не будем использовать сторонних ресурсов. Разве что можно добавить звуки дождя.
Для этого нам понадобиться новая вкладка со свойствами:
TabPage:
Text: | Дождик |
Cursor: | PanSouth |
Один новый таймер со свойствами:
TabPage:
( Name): | timer2 |
Interval: | 60 |
Один PictureBox, растянутый на всю новую вкладку со свойствами:
PictureBox:
(Name): | pictureBox1 |
Anchor: | Top, Bottom, Left, Right |
Код для события Selected элемента TabControl:
if (e.TabPage.Name == tabPage6.Name) timer2.Enabled = true;
else timer2.Enabled = false;
После закрывающей скобки предыдущего события в файле LWP19Main.cs добавим:
// Начало: вкладка "Дождик"
private static Image _raindropImage;
private readonly List<Raindrop> _raindrops;
// Конец: вкладка "Дождик"
#region Класс Raindrop
private class Raindrop
{
private static readonly Random random = new Random(DateTime.Now.Millisecond);
// Удаление от экрана
private float _depth;
// Положение
private PointF _location;
// Прямоугольник для отрисовки
private Rectangle _rectangleToDraw;
// Скорость
private PointF _speed;
public Raindrop(Rectangle rectangleToDraw)
{
_rectangleToDraw = rectangleToDraw;
SetRandomLoc();
}
public void UpdatePosition()
{
// Вертикальная скрость
_location.Y += _speed.Y;
// Горизонтальная скорость
_location.X += _speed.X;
|
|
if (_location.Y > _rectangleToDraw.Height)
SetRandomLoc();
}
private void SetRandomLoc()
{
// Максимально удаление
const int MAX_DEPTH = 10;
_depth = random.Next(MAX_DEPTH) + 1;
const int MIN_SPEED = 100;
const int SPEED_DISPERSION = 20;
_speed.X = 5;
// Чем дальше капля от экрана, тем она медленнее падает
_speed.Y = (MIN_SPEED + random.Next(SPEED_DISPERSION)) / _depth;
// Необходимо расширить область, в которой появляются капли
const int DY = 200;
int locX = random.Next(_rectangleToDraw.Width + DY) - DY;
int locY = -random.Next(_rectangleToDraw.Height) - _raindropImage.Height;
// Точка возникновения капли
_location = new PointF(locX, locY);
}
public void Draw(Graphics g)
{
// Масштаб текстуры
float scale = 2 / _depth;
g.DrawImage(_raindropImage, _location.X, _location.Y, _raindropImage.Width * scale,
_raindropImage.Height * scale);
}
}
#endregion
Инициализируем событие второго таймера Tick:
private void timer2_Tick(object sender, EventArgs e)
{
// Обновляем положение капель
foreach (Raindrop raindrop in _raindrops)
raindrop.UpdatePosition();
// Перерисовываем картинку
pictureBox1.Refresh();
}
И событие Paint для PictureBox:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
|
|
{
// Отрисовываем капли
foreach (Raindrop raindrop in _raindrops)
raindrop.Draw(e.Graphics);
}
Готово. Можно компилировать и проверять работоспособность.
Завершающая часть
Компилируем приложение (Release) и запускаем. После запуска на первой вкладке видим (можно менять размер формы и наблюдать за изменениями при рисовании):
Рис. 10. 1. Модифицированное приложение Windows Forms: вкладка «Просто фон!»
Переходим на следующую вкладку и нажимаем на кнопки:
Рис. 10. 2. Модифицированное приложение Windows Forms: вкладка «Объекты и градиент»
Переходим на следующую вкладку и жмём левую кнопку мыши на пусто месте. Ведем курсор в любой угол экрана:
Рис. 10. 3. Модифицированное приложение Windows Forms: вкладка «Мой монитор сломался?!»
На следующей вкладке запускаются часы:
Рис. 10. 4. Модифицированное приложение Windows Forms: вкладка «Векторные часы»
А на следующий горит огонь:
Рис. 10. 5. Модифицированное приложение Windows Forms: вкладка «Огонь!!!»
Завершаем всю дождём:
Рис. 10. 6. Модифицированное приложение Windows Forms: вкладка «Дождик»
Если требуется добавить звуки дождя (есть на чём услышать):
|
|
Отредактируем код события Selected для последней вкладки:
if (e.TabPage.Name == tabPage6.Name)
{
timer2.Enabled = true;
player.SoundLocation = "/Raindrop.wav";
player.Play();
}
else
{
timer2.Enabled = false;
player.Stop();
}
И добавим директиву using в начало файла с кодом:
using System.Media;
И добавим до метода Selected строчку с кодом:
SoundPlayer player = new SoundPlayer();
Дата добавления: 2019-09-13; просмотров: 212; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!