Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_NONSTDC_NO_WARNINGS
- #include <Windows.h>
- #include <vector>
- #include <conio.h>
- typedef struct
- {
- int x, y;
- } Vector2;
- #define PI 3.14159265358979323846
- namespace Draw
- {
- auto sqr = [](double var) -> double { return var*var; };
- auto lengthdir_x = [](int len, int dir) -> double { return cos(dir*PI / 180)*len; };
- auto lengthdir_y = [](int len, int dir) -> double { return sin(dir*PI / 180)*len; };
- auto point_direction = [](int x, int y, int x2, int y2) -> double { return atan2(y2 - y, x2 - x) * 180 / PI; };
- auto point_distance = [](int x, int y, int x2, int y2) -> double { return sqrt(sqr(x2 - x) + sqr(y2 - y)); };
- HDC device = GetDC(GetConsoleWindow());
- void DrawLine(Vector2 firstPoint, Vector2 secondPoint, COLORREF color)
- {
- double angle = point_direction(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y);
- for (int i = 0; i < point_distance(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y); i++)
- {
- SetPixel(device, firstPoint.x + lengthdir_x(i, angle), firstPoint.y + lengthdir_y(i, angle), color);
- }
- }
- }
- int main()
- {
- COLORREF bgColor = RGB(0, 0, 0); // цвет очистки
- COLORREF drawColor = RGB(200, 80, 246); // цвет линий
- Draw::DrawLine({ 10, 10 }, { 10, 310 }, drawColor);
- Draw::DrawLine({ 11, 10 }, { 310, 10 }, drawColor);
- Draw::DrawLine({ 310, 11 }, { 310, 310 }, drawColor);
- Draw::DrawLine({ 11, 310 }, { 310, 309 }, drawColor);
- // 0 Up
- // 1 Right
- // 2 Down
- // 3 Left
- int state = 1;
- for (;;)
- {
- state += 4;
- state %= 4;
- // очищаем наш квадратик
- Draw::DrawLine({ 11, 11 }, { 160, 160 }, bgColor);
- Draw::DrawLine({ 309, 11 }, { 161, 160 }, bgColor);
- Draw::DrawLine({ 11, 309 }, { 160, 161 }, bgColor);
- Draw::DrawLine({ 309, 309 }, { 161, 161 }, bgColor);
- // рисуем полудиагонали
- if ((state == 3) || (state == 0)) Draw::DrawLine({ 11, 11 }, { 160, 160 }, drawColor);
- if ((state == 0) || (state == 1)) Draw::DrawLine({ 309, 11 }, { 161, 160 }, drawColor);
- if ((state == 1) || (state == 2)) Draw::DrawLine({ 309, 309 }, { 161, 161 }, drawColor);
- if ((state == 2) || (state == 3)) Draw::DrawLine({ 11, 309 }, { 160, 161 }, drawColor);
- // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Отражать по горизонтали я смысла не вижу, т.к. ничего не поменяется, поэтому я сделал поворот
- // int getch()
- // 77 key right
- // 75 key left
- int c = getch();
- state += (c == 77) - (c == 75);
- };
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment