Графическое приложение, управляющее движением объекта

ВВЕДЕНИЕ


Использование новых информационных технологий в разных сферах деятельности человека привело к разработке программного обеспечения для создания графических объектов (файлов) и дальнейшей работы с ними. Такое программное обеспечение было востребовано на рынке информационных технологий, потому постоянно изменяется, включая в себя всё новые и новые возможности.

Первые шаги программирования на языке С#, требуют тщательного проектирования макета программы, а также наличия литературы по данному языку программирования. Однако, при внимательном изучении литературы, можно добиться хороших познаний данного языка программирования и создавать достаточно хорошее программное обеспечение для разных сфер деятельности.

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

Выбор обусловлен тем, что ключевым средством взаимодействия пользователя с компьютером является графический пользовательский интерфейс. Развитие и совершенствование графического интерфейса тесно связано с развитием компьютерного обеспечения и технологий. Сейчас многие составные части компьютеров разрабатываются с учетом графических режимов работы. Например, дорогие видеокарты, стоимость которых доходит до половины стоимости удовлетворительного компьютера для работы в офисе. Все графические программы разрабатываются с учётом последних новинок компьютерной техники, реагируя на все достижения и всё ближе подходя к реальности изображения и звука. На сегодняшний день существуют программы поражающие своими возможностями с хорошим графическим и звуковым оформлением. Имеется и постоянно возникает огромное количество фирм, которые предоставляют всё новые и новые программы крайне разнообразного характера.

В теоретической части курсовой работы дано краткое описание языка программирования С#. Его достоинства и недостатки.

Практическая часть заключается в разработке математической модели траектории движения объекта с учетом уменьшения скорости при столкновении с границей окна.

Задачи, которые я поставил перед собой, следующие: изучить основы языка программирования С# и особенности разработки графических приложений

Предмет исследования - возможности программирования графических пользовательских интерфейсов с помощью языка С#.

Объект исследования - графический объект перемещающийся в пространстве по определенной формуле.

Актуальность темы заключается в том,что с помощью графического интерфейса можно в удобном виде (таблица, график, функциональная схема, траектория движения ) отобразить почти любые процессы ( физические, математические, химические ).


ГЛАВА 1. ПРОЕКТИРОВАНИЕ ПРИЛОЖЕНИЯ


.1 Выбор языка и среды программирования


С# разрабатывался как язык программирования прикладного уровня для CLR (Common Language Runtime) и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR.

Ниже представлена схема выполнения.NET-приложения в среде CLR.


Рисунок 1. Схема выполнения.NET-приложения в среде CLR.


На данной схеме наглядно видно, как выглядят взаимоотношения между исходным кодом (предусматривающим использование типов из библиотеки базовых классов), компилятором.NET и механизмом выполнения.NET.

Вследствие того, что C# представляет собой гибрид из нескольких языков, он является таким же синтаксически чистым - если не чище - как и Java, почти столь же простым, как VB, и практически таким же мощным и гибким, как С++.


Рисунок 2. Генеалогическое древо С#


Список ключевых особенностей языка C#, которые характерны для всех его версий.

Указатели использовать не требуется! В программах на C# обычно не возникает нужды в манипулировании указателями напрямую.

Автоматическое управление памятью посредством сборки мусора. Учитывая это, ключевое слово delete в C# не поддерживается.

Формальные синтаксические конструкции для классов, интерфейсов, структур, перечислений и делегатов.

Аналогичная языку С++ возможность перегрузки операций для специальных типов без излишних сложностей.

Поддержка программирования на основе атрибутов. Эта разновидность разработки позволяет аннотировать типы и их члены с целью дополнительного уточнения их поведения. Например, если пометить метод атрибутом [Obsolete], при попытке использования этого члена программисты получат соответствующее специальное предупреждение.

С выходом версии.NET 2.0 (примерно в 2005 г.), язык программирования C# был обновлен для поддержки многочисленных новых функциональных возможностей:

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

Поддержка анонимных методов, которые позволяют предоставлять встраиваемую функцию везде, где требуется тип делегата.

Возможность определения единственного типа в нескольких файлах кода (или, если необходимо, в виде представления в памяти) с использованием ключевого слова partial.

В версии.NET 3.5 (вышедшей примерно в 2008 г.) в язык программирования C# была добавлена дополнительная функциональность, включая следующие средства.

Поддержка строго типизированных запросов (т.е. LINQ), применяемых для взаимодействия с разнообразными формами данных.

Поддержка анонимных типов, которые позволяют моделировать форму типа, а не его поведение.

Возможность расширения функциональности существующего типа (не создавая его подклассы) с использованием расширяющих методов.

Включение лямбда-операции (=>), которая еще больше упрощает работу с типами делегатов.NET.

Новый синтаксис инициализации объектов, который позволяет устанавливать значения свойств во время создания объекта.

Версия.NET 4.0 (вышедшая в 2010 г.) дополнила C# еще рядом средств:

Поддержка необязательных параметров, а также именованных аргументов в методах.

Поддержка динамического поиска членов во время выполнения через ключевое слово dynamic это обеспечивает универсальный подход к вызову членов на лету независимо от инфраструктуры, с помощью которой они были реализованы (COM, IronRuby, IronPython или службы рефлексии.NET).

Работа с обобщенными типами стала намного понятнее, учитывая возможность легкого отображения обобщенных данных на универсальные коллекции System.Object через ковариантность и контравариантность.

В этой версии C# появилась пара новых ключевых слов (async и await), которые значительно упрощают многопоточное и асинхронное программирование.

Ввиду высокой объектной ориентированности, язык С# великолепно подходит для быстрого конструирования различных компонентов - от высокоуровневой бизнес-логики до системных приложений, использующих низкоуровневый код.


.2 Требования к функциональным возможностям


По нажатию левой кнопки мыши объект должен начать движение по направлению к указателю мыши с заданной скоростью. При столкновении с границей окна, программа должна рассчитать угол падения и угол отражения и перенаправить движение объекта с уменьшением скорости.


.3 Алгоритм работы программы

графический программирование движение скорость

Алгоритм работы создаваемого приложения выглядит следующим образом.


Рисунок 3. Алгоритм программы


1.4 Структура программы


Программа на С# состоит из одного или нескольких файлов. Каждый файл может содержать одно или несколько пространств имен. Каждое пространство имен может содержать вложенные пространства имен и типы, такие как классы, структуры, интерфейсы, перечисления и делегаты- функциональные типы.


ГЛАВА 2. РАЗРАБОТКА ПРИЛОЖЕНИЯ


2.1 Создание проекта


Выбираю из пункта меню Файл > Создать > Проект. Откроется диалоговое окно позволяющее выбрать тип отображаемого шаблона.


Рисунок 4. Создание проекта.


В левой панели в узле Другие языки выбрал узел Visual C#. В центральной панели выбираю шаблон Приложение Windows Forms.


Рисунок 5. Выбор шаблона проекта.


Шаблон Приложение Windows Forms дает возможность создать минимальное приложение которое компилируется и запускается, но не содержит данных или элементов управления пользовательского интерфейса, кроме самой формы. Добавлять элементы в процессе разработки. В панели Обозреватель решений показана решение в котором находиться курсовой проект. В списке проекта выбираю Form1.cs правой кнопкой и из контекстного меню выбрал пункт Перейти к коду.


Рисунок 6. Открытие редактора кода.


2.2 Программирование


В шаблоне будет прописан уже заготовленный код. После объявления класса Form1 объявляю базовые переменные.



В конструкторе инициализирую переменные.



Задаю радиус круга, давая ему значение 20. Позицию задаю с помощью переменных xpos и ypos. В начале она задается произвольно. Переменным, отвечающих за скорость, задаю нулевое значение. Так же статичное значение трению и глушению скорости при отскоке объекта.

Инициализирую таймер, который будет обновлять картинку при 30 кадрах в секунду. Событию по истечению времени (Tick) задам метод, в котором будет просчитываться поведение объекта и перерисовка формы. Viewport задаю объект Graphics, в котором будет нарисован круг.

Теперь метод render. При каждом входе в кадр форма обновляется заливая все однотонным цветом. Так же позиции круга плюсуется скорость.



Что бы круг при движении в определенную сторону не ушел за границы окна пишу такой код. При приближении в краю окна по X скорость xVel умножается на отрицательное число, которое уменьшает скорость в 0,7 раз. Аналогично по Y.



Так же добавляется трение, которое тормозит круг. И при приближении скорости с 0, она обнуляется и таймер останавливается.



Ну и отображение круга на форме.



Создаю событие клика по форме. Метод OnClick переопределяет (override) метод расширяемого класса.



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



Метод force рассчитывает, с какой скоростью будет двигаться круг. Круг движется по направлению к курсору. Чем позиция курсора дальше от круга, тем быстрее скорость круга.


2.3 Виды контроля качества разрабатываемого ПО


Тестирование программы - это этап, на котором проверяется, как ведет себя программа на как можно большем количестве входных наборов данных, в том числе и на заведомо неверных.

Основные принципы организации тестирования:

.необходимой частью каждого теста должно являться описание ожидаемых результатов работы программы, чтобы можно было быстро выяснить наличие или отсутствие ошибки в ней;

.следует по возможности избегать тестирования программы ее автором, т.к. кроме уже указанной объективной сложности тестирования для программистов здесь присутствует и тот фактор, что обнаружение недостатков в своей деятельности противоречит человеческой психологии (однако отладка программы эффективнее всего выполняется именно автором программы);

.по тем же соображениям организация - разработчик программного обеспечения не должна "единолично его тестировать (должны существовать организации, специализирующиеся на тестировании программных средств);

.должны являться правилом доскональное изучение результатов каждого теста, чтобы не пропустить малозаметную на поверхностный взгляд ошибку в программе;

.необходимо тщательно подбирать тест не только для правильных (предусмотренных) входных данных, но и для неправильных (непредусмотренных);

.следует сохранять использованные тесты (для повышения эффективности повторного тестирования программы после ее модификации или установки у заказчика);

.тестирования не должно планироваться исходя из предположения, что в программе не будут обнаружены ошибки (в частности, следует выделять для тестирования достаточные временные и материальные ресурсы);

.следует учитывать так называемый "принцип скопления ошибок: вероятность наличия не обнаруженных ошибок в некоторой части программы прямо пропорциональна числу ошибок, уже обнаруженных в этой части;


2.4 Методы и способы устранения ошибок


Отладка - это комплексный процесс по выявлению и исправлению дефектов в программном обеспечении. Сами же дефекты, обычно, обнаруживается в процессе тестирования ПО.

Отладка состоит из следующих этапов:

воспроизведение дефекта (любым из доступных способов);

анализ дефекта (поиск причины возникновения дефекта);

дизайн исправления дефекта;

кодирование исправления дефекта;

валидация исправления;

интеграция исправления в кодовую базу или целевую систему;

дополнительные валидации после интеграции.

На любом этапе отладки могут возникнуть новые дефекты, которые придётся отлаживать. Например, какая-то часть исправления в коде работает не так как ожидается и соответственно придётся отлаживать эту часть в изоляции и снова основное время уходит на пункты 1 и 2 и т.д.

Этап отладки можно считать законченным, если программа правильно работает на двух-трех наборах входных данных.

Некоторые методы отладки ПО используемые на данный момент в индустрии:

запуск программы из под отладчика;

анализ поведения системы;

тестирование;

анализ кода без исполнения программы;

выполнения программы (или её части) в другой среде;

отладка трансляцией кода.


2.5 Построение решения


При создании решения, отладки и конфигурации построения выпуска и их целевые платформы по умолчанию определяются для решения автоматически. Затем можно настраивать конфигурации или создать собственную. Конфигурации построения определяют тип построения. Можно изменить или создать конфигурацию и платформу с помощью диалогового окна Диспетчер конфигураций.

Нужно изменить конфигурации режима Debug в режим Release.


Рисунок 7. Переключение между отладкой и релизом.


Далее что бы скомпилировать исполняемый файл нужно построить решение. Для этого в Обозревателе решений нужно выбрать решение. В контекстном выбрать пункт Построить решение.


Рисунок 8. Построение решения.


Если компиляция прошла без ошибок исполняемый файл сохраниться по пути \FormApplication\Bin\Release\FormApplication.exe


ГЛАВА 3. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ


.1 Установка программы


Установка программы на компьютер пользователя заключается в копировании папки программы и установки ярлыка на Рабочий стол. Создайте в любом разделе жесткого диска новую папку и скопируйте в нее все файлы папки "Курсовой проект".

Запускать следует файл FormsApplication.exe непосредственно из папки или при помощи ярлыка кнопкой Enter или двойным щелчком мыши.


.2 Порядок работы


Запуск программы производится двойным щелчком мыши на файле FormsApplication.exe или на его ярлыке.

После запуска открывается окно программы.


Рисунок 9. Результат выполнения программы.


Нажать левой кнопкой мыши в любой части окна. Графический объект в форме круга начнет движение по направлению мыши

При столкновении с преградой скорость объекта уменьшается.

Когда объект остановится. Снова нажать левой кнопкой мыши в любой части окна или завершить работу программы.


.3 Выход из программы


Для выхода из программы, необходимо нажать файл-выход (Alt+F4).


ЗАКЛЮЧЕНИЕ


В результате выполнения курсовой работы было выявлены следующие преимущества новой платформы:

.Новый язык С# действительно визуален и по своим возможностям практически не уступает самой мощной визуальной среде разработки Delphi. Визуальность упрощает создание графического интерфейса и ускоряет разработку. И в тоже время позволяет программировать достаточно сложные физико-математические процессы.

.Язык С# относительно прост в изучении и надежен.

.Ввиду высокой объектной ориентированности, язык С# великолепно подходит для быстрого конструирования различных компонентов - от высокоуровневой бизнес-логики до системных приложений, использующих низкоуровневый код.

В результате выполнения курсовой работы я научился создавать собственное законченное приложение. Разработал программу, которая демонстрирует графические возможности языка С# на примерe моделирования движущегося объекта в окне с расчетом его траектории и скорости.

На данный момент мое личное отношение к языку и среде разработки Visual Studio.Net более чем положительное так как этот инструмент программирования позволяет быстро решать широкий круг эффективных, надежных и устойчивым к сбоям задач.


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


1.Дэвис Стефан Рэнди, Сфер Чак. С# 2005 для "чайников". - М. ООО "И.Д. Вильяме", 2008.

.Лабор В. В. Си Шарп: Создание приложений для Windows.- Мн. Харвест, 2003.

.Троелсен, Эндрю. Язык программирования C# 5.0 и платформа.NET 4.5, 6-е изд. М. ООО И.Д. Вильямс, 2013.

.Шилдт Г. - Полный справочник по C#

.Павловская - Программирование на языке высокого уровня на С#.

.Фролов А.В. Фролов Г.В. - Язык С#.

.Культин Н.Б. Microsoft Visual C# в задачах и примерах.


ПРИЛОЖЕНИЕ


Листинг программы

using System;

using System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;FormsApplication {partial class Form1:Form {radius;xpos, ypos, xVel, yVel, friction, braking;rand;framerate;viewport;brush;background;Form1() {();= 20;= new Random();= rand.Next(radius, (this.Width - radius));= rand.Next(radius, (this.Height - radius));

// Velocity of the circle= 0;= 0;=.99;=.7;= new Timer();.Interval = 33; // 30 frame/second.Tick += new EventHandler(this.render);.Start();= this.CreateGraphics();= new SolidBrush(Color.Blue);= BackColor;

}void render(object sender, EventArgs e) {

// Clear all.Clear(background);

// Processing+= xVel;+= yVel;(xpos < radius) {= radius;*= -braking;

} else if(xpos > (this.Width - radius)) {= this.Width - radius;*= -braking;

}(ypos < radius) {= radius;*= -braking;

} else if (ypos > (this.Height - radius - 30)) {= this.Height - radius - 30;*= -braking;

}*= friction;*= friction;((int)(xVel+yVel) == 0) {= yVel = 0;.Stop();

}

// Render.FillEllipse(brush, (Convert.ToInt32(xpos) - radius), (Convert.ToInt32(ypos) - radius), (radius + radius), (radius + radius));

}override void OnClick(EventArgs e) {.OnClick(e);mousePoint = PointToClient(MousePosition);= force(xpos, mousePoint.X,.14,.85, xVel);= force(ypos, mousePoint.Y,.14,.85, yVel);.Start();

}double force(double orig, int dest, double springConst, double damp, double vel) {+= -springConst * (orig - (double)dest);vel *= damp;

}

}

}


Теги: Графическое приложение, управляющее движением объекта  Курсовая работа (теория)  Информационное обеспечение, программирование