Модификация приложения 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!