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

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

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

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

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), которые значительно упрощают многопоточное и асинхронное программирование.

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

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

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

1. 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 Виды контроля качества разрабатываемого ПО

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ПРИЛОЖЕНИЕ

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

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace FormsApplication {

public partial class Form1: Form {

int radius;

double xpos, ypos, xVel, yVel, friction, braking;

Random rand;

Timer framerate;

Graphics viewport;

SolidBrush brush;

Color background;

public Form1() {

InitializeComponent ();

radius = 20;

rand = new Random ();

xpos = rand. Next (radius, (this. Width — radius));

ypos = rand. Next (radius, (this. Height — radius));

// Velocity of the circle

xVel = 0;

yVel = 0;

friction =. 99;

braking =. 7;

framerate = new Timer ();

framerate. Interval = 33; // 30 frame/second

framerate. Tick += new EventHandler (this. render);

framerate. Start ();

viewport = this. CreateGraphics ();

brush = new SolidBrush (Color. Blue);

background = BackColor;

}

private void render (object sender, EventArgs e) {

// Clear all

viewport. Clear (background);

// Processing

xpos += xVel;

ypos += yVel;

if (xpos < radius) {

xpos = radius;

xVel *= -braking;

} else if (xpos > (this. Width — radius)) {

xpos = this. Width — radius;

xVel *= -braking;

}

if (ypos < radius) {

ypos = radius;

yVel *= -braking;

} else if (ypos > (this. Height — radius — 30)) {

ypos = this. Height — radius — 30;

yVel *= -braking;

}

xVel *= friction;

yVel *= friction;

if ((int)(xVel+yVel) == 0) {

xVel = yVel = 0;

framerate. Stop ();

}

// Render

viewport. FillEllipse (brush, (Convert. ToInt32(xpos) — radius), (Convert. ToInt32(ypos) — radius), (radius + radius), (radius + radius));

}

protected override void OnClick (EventArgs e) {

base. OnClick (e);

Point mousePoint = PointToClient (MousePosition);

xVel = force (xpos, mousePoint. X,. 14,. 85, xVel);

yVel = force (ypos, mousePoint. Y,. 14,. 85, yVel);

framerate. Start ();

}

protected double force (double orig, int dest, double springConst, double damp, double vel) {

vel += -springConst * (orig — (double)dest);

ПоказатьСвернуть
Заполнить форму текущей работой