Загрузка данных
#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;
}