Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР 2 Языки программирования академ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
319 Кб
Скачать
☆

3.2.3. Программная реализация «отскакивания от стенок»

Для создания подобного эффекта нужно отслеживать координаты круга с учетом его радиуса. В этом случае удобно создать в классе формы две дополнительные переменные, задающие направление движения по каждой из осей координат:

int xDir, yDir;

Переменная xDir принимает значение 1, если круг двигается вправо, и –1, если влево. Переменная yDir равна 1, если идет движение вниз, и –1, если вверх. Поскольку изначально напрвление вижения задается вправо вверх, этим переменным нужно задать соответствующие исходные значения (в конструкторе или в обработчике события Load):

xDir = 1;

yDir = -1;

«Отскакивание от стенок» реализуется за счет изменения значений этих переменных. Если круг «подлетел» к левой стенке, то после этого он должен начать двигаться вправо, т.е. переменной xDir нужно присвоить значение 1, и т.д. Приближение к стенкам отслеживается по значениям переменных x0 и y0 с учетом радиуса круга. При этом при «касании» кругом правой и нижней стенок необходимо вносить корректировку в 5 пикселей из-за наличия трехмерной рамки у области рисования.

Таким образом, обработчик события Tick для таймера модифицируется следующим образом:

private void timer1_Tick(object sender, EventArgs e)

{

//если круг "подлетел" к левой стенке,

if (x0 - radius < 0)

xDir = 1; //то начинаем двигаться вправо

//если к правой стенке,

if (x0 + radius + 5 > pictureBox1.Width)

xDir = -1; //то влево

//если к верхней стенке,

if (y0 - radius < 0)

yDir = 1; //то вниз

//если к нижней стенке,

if (y0 + radius + 5 > pictureBox1.Height)

yDir = -1; //то вверх

//изменяем координаты круга

x0 += xDir;

y0 += yDir;

//обновляем область рисования (перерисовываем круг)

pictureBox1.Invalidate();

}

3.2.4. Изменение скорости движения круга

Для изменения скорости движения нужно изменять интервал поступления сигнала от таймера, что, в свою очередь, будет регулироваться компонентом TrackBar. Интервал сигнала от таймера в данном приложении задается диапазоном от 5 до 50 миллисекунд. Соответствующие настройки задаются и для компонента TrackBar:

Свойство

Значение

Описание

Minimum

5

Минимальное значение

Maximum

50

Максимальное значение

Value

10

Текущее значение

При прокрутке движка компонента TrackBar программе поступает сообщение Scroll, в обработчике которого и нужно изменять значение интервала таймера:

private void trackBar1_Scroll(object sender, EventArgs e)

{

//изменяем значение интервала таймера на выбранное

timer1.Interval = trackBar1.Value;

}

3.2.5. Создание диалоговой панели выбора цвета заливки

Для выбора цвета заливки круга в данном приложении будет использоваться дополнительное диалоговое окно с группой радиокнопок. Внешний вид этого окна приведен на рисунке 2.8.

Рис. 2.8 – Диалоговая панель выбора цвета заливки

В этом окне в компоненте GroupBox расположены 6 радиокнопок (RadioButton)с названиями цветов, а также 2 кнопки: «OK» и «Отмена». На кнопки помимо надписей добавлены соответствующие рисунки.

Рисунки можно добавить на кнопку либо через ее свойство Image, либо, как и сделано в данной программе, через компонент ImageList. Этот компонент представляет собой список изображений, которые потом можно назначать обычным кнопкам, пунктам меню, кнопкам панели инструментов и другим компонентам. После помещения этого компонента на форму нужно настроить его свойство Images, где с помощью отдельного диалогового окна в проект добавляются файлы с изображениями. Каждое добавленное изображение имеет свой индекс (порядковый номер), начиная с 0. В данном приложении рисунок для кнопки «OK» имеет индекс 0, а для кнопки «Отмена» – 1.

Файлы с рисунками и иконками можно найти в папке: C:\Program Files\Microsoft Visual Studio 8\Common 7\VS2005ImageLibrary.

Настройки кнопок «OK» и «Отмена» приведены в таблице:

Свойство

Значение

Описание

ImageList

imageList1

Источник изображений

ImageIndex

0 для кнопки «OK», 1 для кнопки «Отмена»

Индекс изображения в источнике

ImageAlign

MiddleCenter

Выравнивание изображения

TextAlign

MiddleCenter

Выравнивание текста

TextImageRelation

ImageBeforeText

Взаимное расположение текста и изображения

DialogResult

OK для кнопки «OK», Cancel для кнопки «Отмена»

Возвращаемое значение для нажатия кнопки

Установка значения OK свойству DialogResult для кнопки «OK» означает, что при нажатии на эту кнопку форма закроется и вернет в главное окно значение DialogResult.OK (для кнопки «Cancel» – DialogResult.Cancel).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]