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

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

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

Научный руководитель
Информационные технологии
08.01.2020
150
Поделиться
Библиографическое описание
Лобашевская, В. А. Разработка программного кода, реализующего на основе однодокументного интерфейса движение фигуры на плоскости / В. А. Лобашевская. — Текст : непосредственный // Молодой ученый. — 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);

}

}

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

Можно быстро и просто опубликовать свою научную статью в журнале «Молодой Ученый». Сразу предоставляем препринт и справку о публикации.
Опубликовать статью
Ключевые слова
программный код
пользовательское окно
C++
RGB
движение фигуры
белое перо
Молодой учёный №2 (292) январь 2020 г.
Скачать часть журнала с этой статьей(стр. 17-20):
Часть 1 (стр. 1-75)
Расположение в файле:
стр. 1стр. 17-20стр. 75

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