Загрузка данных
#include <iostream>
#include <Windows.h>
using namespace std;
// Получаем окно консоли
HWND hWnd = GetConsoleWindow();
// Получаем контекст устройства для рисования
HDC hDC = GetDC(hWnd);
// Функция рисования восьмиугольника
void OctagonShow(COLORREF Color, int x, int y, int w, int h)
{
HPEN hPen = CreatePen(PS_SOLID, 2, Color);
// Внутри восьмиугольник не закрашиваем
HBRUSH hBrush = GetStockBrush(NULL_BRUSH);
SelectObject(hDC, hPen);
SelectObject(hDC, hBrush);
// Создаём 8 точек восьмиугольника
POINT points[8];
points[0].x = x + w / 4;
points[0].y = y;
points[1].x = x + w - w / 4;
points[1].y = y;
points[2].x = x + w;
points[2].y = y + h / 4;
points[3].x = x + w;
points[3].y = y + h - h / 4;
points[4].x = x + w - w / 4;
points[4].y = y + h;
points[5].x = x + w / 4;
points[5].y = y + h;
points[6].x = x;
points[6].y = y + h - h / 4;
points[7].x = x;
points[7].y = y + h / 4;
// Рисуем восьмиугольник
Polygon(hDC, points, 8);
DeleteObject(hPen);
}
// Главная функция
int main()
{
// Координаты квадрата
int squareX = 100;
int squareY = 100;
// Размер квадрата
int squareSize = 300;
// Начальная ширина и высота восьмиугольника
int w = 80;
int h = 60;
// Получаем цвет фона
COLORREF color = GetPixel(hDC, 0, 0);
// ==========================================
// ДВИЖЕНИЕ ВПРАВО
// ШИРИНА УМЕНЬШАЕТСЯ
// ==========================================
for (int x = squareX; x <= squareX + squareSize - w; x += 5)
{
// Стираем предыдущий восьмиугольник
OctagonShow(color, x - 5, squareY, w, h);
// Уменьшаем ширину
w -= 1;
// Минимальная ширина
if (w < 20)
w = 20;
// Рисуем новый восьмиугольник
OctagonShow(RGB(255, 0, 0), x, squareY, w, h);
// Задержка
Sleep(50);
}
// ==========================================
// ДВИЖЕНИЕ ВНИЗ
// ==========================================
for (int y = squareY; y <= squareY + squareSize - h; y += 5)
{
// Стираем предыдущий
OctagonShow(color,
squareX + squareSize - w,
y - 5,
w,
h);
// Рисуем
OctagonShow(RGB(255, 0, 0),
squareX + squareSize - w,
y,
w,
h);
Sleep(50);
}
// ==========================================
// ДВИЖЕНИЕ ВЛЕВО
// ШИРИНА УВЕЛИЧИВАЕТСЯ
// ==========================================
for (int x = squareX + squareSize - w;
x >= squareX;
x -= 5)
{
// Стираем предыдущий
OctagonShow(color,
x + 5,
squareY + squareSize - h,
w,
h);
// Увеличиваем ширину
w += 1;
// Максимальная ширина
if (w > 80)
w = 80;
// Рисуем новый
OctagonShow(RGB(255, 0, 0),
x,
squareY + squareSize - h,
w,
h);
Sleep(50);
}
// ==========================================
// ДВИЖЕНИЕ ВВЕРХ
// ==========================================
for (int y = squareY + squareSize - h;
y >= squareY;
y -= 5)
{
// Стираем предыдущий
OctagonShow(color,
squareX,
y + 5,
w,
h);
// Рисуем
OctagonShow(RGB(255, 0, 0),
squareX,
y,
w,
h);
Sleep(50);
}
// Ждём нажатия Enter
cin.get();
return 0;
}