Загрузка данных


#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;
}