Отправьте статью сегодня! Журнал выйдет ..., печатный экземпляр отправим ...
Опубликовать статью

Молодой учёный

Разработка программного кода, реализующего на основе однодокументного интерфейса движение фигуры на плоскости

Научный руководитель
Информационные технологии
08.01.2020
153
Поделиться
Аннотация
Статья посвящена описанию процесса проектирования и разработки программы реализации движения фигуры на плоскости. В данном случае фигура будет — самолет, движение фигуры: взлет и выход на прямую траекторию от левой границы окна до правой с остановом при достижении правой границы. Движение и фигура должны отображаться в пользовательском окне.
Библиографическое описание
Лобашевская, В. А. Разработка программного кода, реализующего на основе однодокументного интерфейса движение фигуры на плоскости / В. А. Лобашевская. — Текст : непосредственный // Молодой ученый. — 2020. — № 2 (292). — С. 17-20. — URL: https://moluch.ru/archive/292/66104.


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

Ключевые слова: программный код, пользовательское окно, C++, RGB, движение фигуры, белое перо.

Программа строится на основе мастера MFC AppWizard с форматом окна «Single document» на языке C++.

При создании приложений автоматически создается 4 основных класса:

– CKursovicApp — класс, производный от CWinApp;

– CMainFrame — класс, производный от CFrameView;

– CKursovicDoc — класс, производный от CDocument;

– CKursovicView — класс, производный от CView.

Класс CWinApp образует все прочие элементы приложения, данный класс получает все сообщения о событиях и затем направляет их классам CFrameView и CView.

Класс CFrameView — класс окна, образующий его рамку. Он содержит меню, панель инструментов, полосы прокрутки, а также многие другие видимые объекты, относящиеся к рамке окна. Данный класс определяет какая часть документа является видимой в каждый момент времени.

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

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

В данной программе используется движение фигуры с ограничением движения по оси X и Y, поэтому диапазон движения ограничен:

– переменная x должна лежать в диапазоне от 0 до crect.Width (Изменяемая ширина пользовательского окна);

– переменная y должна лежать в диапазоне от 0 до crect.Height (Изменяемая высота пользовательского окна).

Основной код будет написан в классе CKursovicView. Составим общий алгоритм программы:

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

Составим алгоритм главного метода, в котором будет происходить движение, myDraw():

Перейдем к коду.

void CKursovicView::myDraw(CDC* pDC) //Движение самолета

{

CKursovicDoc * pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)

return;

// TODO: добавьте здесь код отрисовки для собственных данных

CRect crect;

CPen BlackPen, WhitePen;

GetWindowRect(&crect); //Получение ширины и высоты пользовательского окна

WhitePen.CreatePen(PS_SOLID, 100, RGB(255, 255, 255)); //создание белого пера

BlackPen.CreatePen(PS_SOLID, 5, RGB(0, 0, 0)); //создание черного пера

x1 = crect.Width() / crect.Width() + 100;

y1 = crect.Height() * 4 / 5;

pDC->SelectObject(&WhitePen); //выбор пера

Подготовительные работы завершены, осталось нарисовать фигуру и осуществить движение.

Для отрисовки создадим новый метод airplane(). Рисунок состоит из линий и нарисован относительно начальной координаты.

void CKursovicView::airplane(CDC* pDC) //Прорисовка самолета

{

pDC->MoveTo(x1 + 100, y1–100);

pDC->LineTo(x1–100, y1–100);

pDC->LineTo(x1–40, y1–40);

pDC->LineTo(x1–40, y1–20);

pDC->LineTo(x1–20, y1–20);

pDC->LineTo(x1, y1 + 60);

pDC->LineTo(x1 + 100, y1–100);

pDC->LineTo(x1–20, y1–20);

pDC->LineTo(x1 + 100, y1–100);

pDC->LineTo(x1–40, y1–20);

pDC->LineTo(x1 + 100, y1–100);

pDC->LineTo(x1–40, y1–40);

}

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

while (x1 < crect.Width() * 4 / 10) //разгон

{

pDC->SelectObject(&WhitePen);

pDC->Rectangle(x1–100, y1–100, x1 + 100, y1 + 100); //стирание уже нарисованного самолета

x1 += 7; //сдвиг на несколько пикселей

pDC->SelectObject(&BlackPen);

airplane(pDC);

Sleep(5); //миллисекундная задержка для наглядности движения

}

while (y1 > crect.Height() / 3) //взлет

{

pDC->SelectObject(&WhitePen);

pDC->Rectangle(x1–100, y1–100, x1 + 100, y1 + 100);

x1 += 5; y1 -= 5;

pDC->SelectObject(&BlackPen);

airplane(pDC);

Sleep(5);

}

while (x1 + 105 < crect.Width()) //движение по прямой

{

pDC->SelectObject(&WhitePen);

pDC->Rectangle(x1–100, y1–100, x1 + 100, y1 + 100);

x1 += 3;

pDC->SelectObject(&BlackPen);

airplane(pDC);

Sleep(5);

}

}

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

Можно быстро и просто опубликовать свою научную статью в журнале «Молодой Ученый». Сразу предоставляем препринт и справку о публикации.
Опубликовать статью
Молодой учёный №2 (292) январь 2020 г.
Скачать часть журнала с этой статьей(стр. 17-20):
Часть 1 (стр. 1-75)
Расположение в файле:
стр. 1стр. 17-20стр. 75
Похожие статьи
Разработка программного кода на основе библиотеки MFC и объектно ориентированного подхода
Разработка программы расписания поездов на основе библиотеки MFC и объектно ориентированного подхода
Использование библиотеки SFML для визуализации результатов моделирования процессов небесной механики
Средства визуального программирования на языке С++. Среда CLR
Дизайн компьютерных приложений для визуализации информации об учебных компьютерных моделях
Разработка системы моделирования двигателя внутреннего сгорания в рабочем режиме
Моделирование движения космических тел для исследования устойчивости планетарных систем двойных звёзд
Проблематика программирования анимации 3D-объектов с графической библиотекой OpenGL
Автоматизированный анализ полётных данных для осуществления контроля и предварительного оценивания полетов
Разработка интерфейса программы измерения скорости движения макета спускаемого аппарата для стенда бросковых испытаний по теме «Луна-Глоб»

Молодой учёный