NyanCoder

Рисуем непонятную хуетень

Oct 26th, 2016
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #define _CRT_NONSTDC_NO_WARNINGS
  2. #include <Windows.h>
  3. #include <vector>
  4. #include <conio.h>
  5.  
  6. typedef struct
  7. {
  8.     int x, y;
  9. } Vector2;
  10.  
  11. #define PI 3.14159265358979323846
  12.  
  13. namespace Draw
  14. {
  15.     auto sqr = [](double var) -> double { return var*var; };
  16.  
  17.     auto lengthdir_x = [](int len, int dir) -> double { return cos(dir*PI / 180)*len; };
  18.     auto lengthdir_y = [](int len, int dir) -> double { return sin(dir*PI / 180)*len; };
  19.     auto point_direction = [](int x, int y, int x2, int y2) -> double { return atan2(y2 - y, x2 - x) * 180 / PI; };
  20.     auto point_distance = [](int x, int y, int x2, int y2) -> double { return sqrt(sqr(x2 - x) + sqr(y2 - y)); };
  21.  
  22.     HDC device = GetDC(GetConsoleWindow());
  23.  
  24.     void DrawLine(Vector2 firstPoint, Vector2 secondPoint, COLORREF color)
  25.     {
  26.         double angle = point_direction(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y);
  27.         for (int i = 0; i < point_distance(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y); i++)
  28.         {
  29.             SetPixel(device, firstPoint.x + lengthdir_x(i, angle), firstPoint.y + lengthdir_y(i, angle), color);
  30.         }
  31.     }
  32. }
  33.  
  34. int main()
  35. {
  36.     COLORREF bgColor = RGB(0, 0, 0); // цвет очистки
  37.     COLORREF drawColor = RGB(200, 80, 246); // цвет линий
  38.     Draw::DrawLine({ 10, 10 }, { 10, 310 }, drawColor);
  39.     Draw::DrawLine({ 11, 10 }, { 310, 10 }, drawColor);
  40.     Draw::DrawLine({ 310, 11 }, { 310, 310 }, drawColor);
  41.     Draw::DrawLine({ 11, 310 }, { 310, 309 }, drawColor);
  42.  
  43.     // 0 Up
  44.     // 1 Right
  45.     // 2 Down
  46.     // 3 Left
  47.  
  48.     int state = 1;
  49.  
  50.     for (;;)
  51.     {
  52.         state += 4;
  53.         state %= 4;
  54.  
  55.         // очищаем наш квадратик
  56.         Draw::DrawLine({ 11, 11 }, { 160, 160 }, bgColor);
  57.         Draw::DrawLine({ 309, 11 }, { 161, 160 }, bgColor);
  58.         Draw::DrawLine({ 11, 309 }, { 160, 161 }, bgColor);
  59.         Draw::DrawLine({ 309, 309 }, { 161, 161 }, bgColor);
  60.  
  61.         // рисуем полудиагонали
  62.         if ((state == 3) || (state == 0)) Draw::DrawLine({ 11, 11 }, { 160, 160 }, drawColor);
  63.         if ((state == 0) || (state == 1)) Draw::DrawLine({ 309, 11 }, { 161, 160 }, drawColor);
  64.         if ((state == 1) || (state == 2)) Draw::DrawLine({ 309, 309 }, { 161, 161 }, drawColor);
  65.         if ((state == 2) || (state == 3)) Draw::DrawLine({ 11, 309 }, { 160, 161 }, drawColor);
  66.        
  67.         // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Отражать по горизонтали я смысла не вижу, т.к. ничего не поменяется, поэтому я сделал поворот
  68.         // int getch()
  69.         // 77 key right
  70.         // 75 key left
  71.        
  72.         int c = getch();
  73.         state += (c == 77) - (c == 75);
  74.     };
  75.  
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment