МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра САПР ОТЧЕТ по лабораторной работе №1 по дисциплине «Программирование» Тема: «Знакомство с библиотекой SFML. Создание геометрических фигур с помощью методов библиотеки SFML» Студент гр. 1322 Следников Е.С. Преподаватель Кузьмин С.А. Санкт-Петербург 2023 1. Постановка задачи Цель работы знакомство с модулями и методами библиотеки SFML; изучение процедуры установки библиотеки SFML и её настройки в среде разработки; создание (и настройка) проекта программы на основе библиотеки SFML в среде разработки; получение практических навыков рисования простых и составных геометрических объектов (фигур) в оконном приложении на основе библиотеки SFML. Формулировка задания Изучите учебно-методические материалы по библиотеке SFML на сайте https://www.sfml-dev.org/. Скачайте версию библиотеки SFML, совместимую с Вашей средой разработки. Выполните процедуру установки SFML на свой компьютер. Создайте и сконфигурируйте проект SFML в среде разработки. Изучите работу программы по рисованию простой фигуры на учебном примере. Модернизируйте код программы для рисования фигуры согласно Вашему варианту задания. Вариант №5: Нарисуйте треугольник (произвольной формы). Указания по выполнению Дистрибутив библиотеки SFML (под нужную среду разработки) можно скачать здесь: https://www.sfml-dev.org/download/sfml/2.5.1/. 2 Инструкцию по установке библиотеки SFML и её настройке в среде Microsoft Visual Studio можно найти здесь: https://www.sfml- dev.org/tutorials/2.5/start-vc.php. Инструкцию по установке библиотеки SFML и её настройке в среде Code::Blocks (с поддержкой MinGW) можно найти здесь: https://www.sfmldev.org/tutorials/2.5/start-cb.php. Инструкцию по установке библиотеки SFML и её настройке в среде XCode можно найти здесь: https://www.sfml-dev.org/tutorials/2.5/start-osx.php. Руководство по созданию оконного приложения на основе библиотеки SFML приведено здесь: https://www.sfml-dev.org/tutorials/2.5/window-window.php. Пример кода программы с рисованием простейшей 2D-фигуры приведён в данной странице: https://www.sfml-dev.org/tutorials/2.5/graphics-draw.php. Фрагменты кода по рисованию некоторых видов геометрических фигур можно найти здесь: https://www.sfml-dev.org/tutorials/2.5/graphics-shape.php. 3 2. Описание программы Алгоритм работы программы 1) После запуска программы создается окно, в котором будет нарисован треугольник: const int windowX = 640; const int windowY = 480; RenderWindow window(VideoMode(windowX, windowY), L"Простые фигуры"); 2) Далее создается фигура triangle, которая будет иметь три вершины: ConvexShape triangle; triangle.setPointCount(3); 3) У пользователя просят ввести координаты, каждой из вершин треугольника, выполняется проверка на правильность ввода, а также к треугольнику triangle прикрепляется очередная вершина: do { cout << "Введите кординаты " << k + 1 << " вершины треугольника (через пробел) : "; cin >> x >> y; if ((x < 0) || (x > windowX) || (y < 0) || (y > windowY)) { cout << "Координаты введены неверно!" << endl; } else { triangle.setPoint(k, Vector2f(x, y)); k++; } } while (k < 3); 4) Далее программа рисует треугольник в окне: while (window.isOpen()) { Event event; while (window.pollEvent(event)) { if (event.type == Event::Closed) window.close(); } window.clear(); window.draw(triangle); window.display(); } 5) Команда, приведенная ниже, нужна для обработки событий window.pollEvent(event) 4 6) Команда, приведенная ниже, очищает все окно перед рендерингом нового полотна: window.clear(); 7) Команда, приведенная ниже, рисует треугольник на полотне, вершины которого находятся в координатах, заданных ранее: window.draw(triangle); 8) Команда, приведенная ниже, отображает содержимое полотна в окне программы: window.display(); Полный код программы приведён в Приложение 1. Листинг программного кода. 5 3. Руководство пользователя Примеры выполнения программы Пример №1 Пример входных данных представлен на рисунке 1. Рисунок 1. Входные данные по примеру №1 Результат работы программы представлен на рисунке 2. Рисунок 2. Результат работы программы по примеру №1 Пример №2 Пример входных данных представлен на рисунке 3. Рисунок 3. Входные данные по примеру №2 Результат работы программы представлен на рисунке 4. 6 Рисунок 4. Результат работы программы по примеру №2 Пример №3 Если введенные пользователем координаты выходят за размер окна, программа уведомляет об этом и просит ввести координаты еще раз (рисунок 5). Рисунок 5. Результат работы программы по примеру №3 7 Выводы В результате выполнения данной лабораторной работы я познакомился с модулями и методами библиотеки SFML, изучил процедуры её установки и настройки в среде разработки. Получил практические навыки рисования простых и составных геометрических объектов (фигур) в оконном приложении на основе библиотеки SFML. Реализованная программа соответствует выполняет свою работу. 8 поставленным задачам и Приложение 1. Листинг программного кода Main.cpp #include <SFML/Graphics.hpp> #include <iostream> #include <conio.h> #include <windows.h> using namespace std; using namespace sf; int main() { setlocale(LC_CTYPE, "Russian"); SetConsoleCP(65001); SetConsoleOutputCP(65001); const int windowX = 640; const int windowY = 480; RenderWindow window(VideoMode(windowX, windowY), L"Простые фигуры"); ConvexShape triangle; triangle.setPointCount(3); int x, y; int k = 0; do { cout << "Введите координаты " << k + 1 << " вершины треугольника (через пробел) : "; cin >> x >> y; if ((x < 0) || (x > windowX) || (y < 0) || (y > windowY)) { cout << "Координаты введены неверно!" << endl; } else { triangle.setPoint(k, Vector2f(x, y)); k++; } } while (k < 3); triangle.setFillColor(Color::Green); while (window.isOpen()) { Event event; while (window.pollEvent(event)) { if (event.type == Event::Closed) window.close(); } window.clear(); window.draw(triangle); window.display(); } std::cout << "Введите любую клавишу для завершения программы ... "; _getch(); return 0; } 9 10