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


#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <windowsx.h>
#include <tchar.h>
#include <cmath>

using namespace std;

HWND hWnd = GetConsoleWindow();
HDC hDC = GetDC(hWnd);

// Функция отображения восьмиугольника
void OctagonShow(COLORREF Color, int iCenterX, int iCenterY, int iw, int ih)
{
    HPEN hPen = CreatePen(PS_SOLID, 2, Color);
    HBRUSH hBrush = GetStockBrush(NULL_BRUSH);

    SelectObject(hDC, hPen);
    SelectObject(hDC, hBrush);

    POINT points[8];

    // Центр восьмиугольника
    int cx = iCenterX + iw / 2;
    int cy = iCenterY + ih / 2;

    // Радиусы по горизонтали и вертикали
    double rx = iw / 2.0;
    double ry = ih / 2.0;

    // Построение 8 вершин
    for (int i = 0; i < 8; i++)
    {
        double angle = 2 * 3.1415926535 * i / 8.0;

        points[i].x = cx + (int)(rx * cos(angle));
        points[i].y = cy + (int)(ry * sin(angle));
    }

    Polygon(hDC, points, 8);

    DeleteObject(hBrush);
    DeleteObject(hPen);
}


// Головная функция
int main()
{
    COLORREF color = GetPixel(hDC, 0, 0);

    // Начальные координаты
    int x = 100;
    int y = 50;

    // Начальные размеры восьмиугольника
    int w = 80;
    int h = 80;

    // Размер стороны квадрата перемещения
    int squareSize = 250;

    // Координаты начала квадрата
    int squareX = 50;
    int squareY = 50;

    // Скорость перемещения
    int speed = 5;

    // Направление движения:
    // 0 - вправо
    // 1 - вниз
    // 2 - влево
    // 3 - вверх
    int direction = 0;

    // Текущее горизонтальное положение
    int posX = squareX;

    // Текущее вертикальное положение
    int posY = squareY;

    // Горизонтальный размер
    int currentWidth = w;

    // Вертикальный размер остается постоянным
    int currentHeight = h;

    // Первый вывод восьмиугольника
    OctagonShow(RGB(255, 0, 0),
                posX, posY,
                currentWidth, currentHeight);

    cin.get();

    // Бесконечная анимация
    for (;;)
    {
        // Стираем предыдущий восьмиугольник
        OctagonShow(color,
                    posX, posY,
                    currentWidth, currentHeight);

        // Движение по квадрату
        if (direction == 0)
        {
            // Движение вправо
            posX += speed;

            if (posX + currentWidth >= squareX + squareSize)
            {
                posX = squareX + squareSize - currentWidth;
                direction = 1;
            }
        }
        else if (direction == 1)
        {
            // Движение вниз
            posY += speed;

            if (posY + currentHeight >= squareY + squareSize)
            {
                posY = squareY + squareSize - currentHeight;
                direction = 2;
            }
        }
        else if (direction == 2)
        {
            // Движение влево
            posX -= speed;

            if (posX <= squareX)
            {
                posX = squareX;
                direction = 3;
            }
        }
        else if (direction == 3)
        {
            // Движение вверх
            posY -= speed;

            if (posY <= squareY)
            {
                posY = squareY;
                direction = 0;
            }
        }

        // Горизонтальное уменьшение
        if (currentWidth > 20)
        {
            currentWidth -= 1;
        }
        else
        {
            // После достижения минимального размера
            // начинаем увеличение заново
            currentWidth = w;
        }

        // Рисуем восьмиугольник
        OctagonShow(RGB(255, 0, 0),
                    posX, posY,
                    currentWidth, currentHeight);

        // Задержка для анимации
        Sleep(50);
    }

    cin.get();

    return 0;
}