Файл: Отчет по курсовой работе по дисциплине Программирование.docx

ВУЗ: Не указан

Категория: Отчет по практике

Дисциплина: Не указана

Добавлен: 10.01.2024

Просмотров: 14

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра САПР


отчет

по курсовой работе

по дисциплине «Программирование»


Студент гр. 2301




Мещеряков М.А.

Преподаватель




Рыжов Н.Г.



Санкт-Петербург

2022

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


Схема алгоритма программы Концентрические окружности
Текст программы Концентрические окружности

#include // для SFML

#include // для cin

#include // для SetConsoleCP()

#define FRST_CIRCLE_R 55 // Радиус первого самого малого круга

#define RADIUS_DEFFERENCE 55 // Разница между радиусами

#define ANIMATION_SPEED 500 // Задержка проигрывания анимации

#define NUMBER_OF_CIRCLES 7 // Количество окружностей

#define LENGTH_WINDOW 1280 // Длина окна

#define WIGHT_WINDOW 960 // Ширина окна

#define FRST_COLOR 255,0,0 // Первый цвет

#define SCND_COLOR 255,102,0 // Второй цвет

#define THRD_COLOR 255,255,0 // Третий цвет

#define FRTH_COLOR 0,255,0 // Четвертый цвет

#define FVTH_COLOR 0,255,255 // Пятый цвет

#define SXTH_COLOR 0,0,255 // Шестой цвет

#define SVNTH_COLOR 255,0,255 // Седьмой цвет

using namespace sf; // пространство имен SF

int main()

{

SetConsoleCP(1251); // разрешить русский текст в потоке ввода

SetConsoleOutputCP(1251); // разрешить русский текст в потоке вывода

std::cout << "Для завершения программы закройте окно 'Концентрические окружности' ...";

int const colums = NUMBER_OF_CIRCLES; // количество столбцов в массиве цветов

int color_array[colums][3] = { {FRST_COLOR},

{SCND_COLOR},

{THRD_COLOR},

{FRTH_COLOR}, // // Все цвеа записаны в массив цветов

{FVTH_COLOR},

{SXTH_COLOR},

{SVNTH_COLOR} };

float circle_r = RADIUS_DEFFERENCE * (NUMBER_OF_CIRCLES + 1); // Радиус самого большого круга. Отрисовка кругов начинается с него по убыванию радиусов

int i, j; // счетчики в циклах

i = j = 0;

RenderWindow window(VideoMode(LENGTH_WINDOW, WIGHT_WINDOW), L"Концентрические окружности"); // создаем окно

CircleShape circle_(circle_r); // Создаем класс круг

while (window.isOpen()) //цикл пока графическое окно не закрыто

{

Event event;

while (window.pollEvent(event)) //проверка событий

{

if (event.type == Event::Closed) //если поступила команда закрытия окна

window.close(); // Закрыть окно

}

for (int i = NUMBER_OF_CIRCLES - 1; i >= 0; i--) // Цикл рисования кругов

{

circle_.setRadius(circle_r - RADIUS_DEFFERENCE); // Установка радиуса

circle_r = circle_.getRadius(); // запись радиуса в переменную

circle_.setPosition((LENGTH_WINDOW / 2) - circle_r, (WIGHT_WINDOW / 2) - circle_r); // установка расположения круга

circle_.setFillColor(Color(color_array[i][j], color_array[i][j + 1], color_array[i][j + 2])); // установка цвета

window.draw(circle_); // вывод круга в буфер

}

sleep(sf::milliseconds(ANIMATION_SPEED)); // задержка

window.display(); // отображение буфера на экран

i = NUMBER_OF_CIRCLES; // возвращаем значение i на изначальное, равное кол-ву кругов

circle_r = RADIUS_DEFFERENCE * (NUMBER_OF_CIRCLES + 1); // возвращаем изначальное значение радиуса, т.е. радиус самого большого круга

for (int i = NUMBER_OF_CIRCLES - 1; i > 0; i--) // цикл смены цветов

{

std::swap(color_array[i], color_array[i-1]); // функция swap меняет местами i и i+1 элемент в массиве, т.е. цвета

}

}

}
Описание программы Концентрические окружности

Название программы – Концентрические окружности. Функциональным назначением является вывод экранной заставки смены цветов концентрических окружностей в окно размером 1280 на 960.

Все цвета окружностей записаны в массив, в котором в каждом столбце записан цвет. Установка каждой окружности своего цвета выполняется за счет перебора строк этого массива. Анимация происходит за счет последовательной смены цветов всех окружностей, начиная с внутренней окружности и заканчивая внешней. Отрисовка окружностей выполняется с самого большого и по убыванию до самого малого.
Программист имеет возможность настройки программы путем изменения следующих констант:

FRST_CIRCLE_R - Радиус первой самой малой окружности

RADIUS_DEFFERENCE - Разница между радиусами

ANIMATION_SPEED - Задержка проигрывания анимации

NUMBER_OF_CIRCLES - Количество окружностей

LENGTH_WINDOW - Длина окна

WIGHT_WINDOW - Ширина окна

FRST_COLOR - Первый цвет

SCND_COLOR - Второй цвет

THRD_COLOR - Третий цвет

FRTH_COLOR - Четвертый цвет

FVTH_COLOR - Пятый цвет

SXTH_COLOR - Шестой цвет

SVNTH_COLOR - Седьмой цвет


Руководство пользователя для программы Концентрические окружности

Название программы – Концентрические окружности. При запуске программы открывается окно размером 1280 на 960 с проигрывающейся анимацией (Рис. 1). Для завершения программы следует закрыть это окно, об этом сообщает текст в текстовом окне (Рис. 2).

Р ис. 1



Рис. 2

Пример результата работы программы (Рис. 3).



Рис. 3

Путей дальнейшего улучшения программы мной найдено не было.