HICONT

Header.h

Apr 21st, 2022 (edited)
1,033
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.12 KB | None | 0 0
  1. #pragma once
  2. #include <cmath>
  3. using namespace System::Drawing;
  4. class Rectangl
  5. {
  6. protected:
  7.     int x, y, a, b;
  8. public:
  9.     Rectangl() {
  10.  
  11.     }
  12.     Rectangl(int _x, int _y, int size_x, int size_y) {
  13.     x = _x;
  14.     y = _y;
  15.     a = size_x;
  16.     b = size_y;
  17.     }
  18.         ~Rectangl() {}
  19.     void move(int delta_x)
  20.     {
  21.         x += delta_x;
  22.     }
  23.     void draw(Graphics^ j)
  24.     {
  25.         Color^ col = gcnew Color();
  26.         SolidBrush^ pen = gcnew SolidBrush(col->Blue);
  27.         j->FillRectangle(pen, x, y, a, b);
  28.     };
  29. };
  30. class window: public Rectangl {
  31. public:
  32.    
  33.     window(int _x, int _y, int h){
  34.         x = _x;
  35.         y = _y;
  36.         a = 4 * h;
  37.         b = 4 * h;
  38.     }
  39.     void draw(Graphics^ j)
  40.     {
  41.         Color^ col = gcnew Color();
  42.         SolidBrush^ pen = gcnew SolidBrush(col->Blue);
  43.         j->FillRectangle(pen, x, y, a, b);
  44.     }
  45.     ~window() {}
  46. };
  47. class krug: public Rectangl
  48. {
  49. public:
  50.    
  51.     krug(int _x, int _y, int h)
  52.     {
  53.         x = _x;
  54.         y = _y;
  55.         a = 4 * h;
  56.         b = 4 * h;
  57.     }
  58.     void draw(Graphics^ j)
  59.     {
  60.         Color^ col = gcnew Color();
  61.         SolidBrush^ pen = gcnew SolidBrush(col->Red);
  62.         j->FillEllipse(pen, x, y, a, b);
  63.     }
  64. };
  65.  
  66. class corpus: public Rectangl
  67. {
  68. public:
  69.    
  70.     corpus(int _x, int _y, int h)
  71.     {
  72.         x = _x;
  73.         y = _y;
  74.         a = 21 * h;
  75.         b = 11 * h;
  76.     }
  77.     void draw(Graphics^ j)
  78.     {
  79.         Color^ col = gcnew Color();
  80.         SolidBrush^ pen = gcnew SolidBrush(col->LightGray);
  81.         j->FillRectangle(pen, x, y, a, b);
  82.     }
  83. };
  84.  
  85. class doors: public Rectangl {
  86. public:
  87.    
  88.     doors(int _x, int _y, int h)
  89.     {
  90.         x = _x;
  91.         y = _y;
  92.         a = 4 * h;
  93.         b = 7 * h;
  94.     }
  95.     void draw(Graphics^ j)
  96.     {
  97.         Color^ col = gcnew Color();
  98.         SolidBrush^ pen = gcnew SolidBrush(col->Green);
  99.         j->FillRectangle(pen, x, y, a, b);
  100.     }
  101. };
  102.  
  103. class truba: public Rectangl
  104. {
  105. public:
  106.     truba() {}
  107.     truba(int _x, int _y, int h)
  108.     {
  109.         x = _x;
  110.         y = _y;
  111.         a = 2 * h;
  112.         b = 3 * h;
  113.     }
  114.     void draw(Graphics^ j)
  115.     {
  116.         Color^ col = gcnew Color();
  117.         SolidBrush^ pen = gcnew SolidBrush(col->Black);
  118.         j->FillRectangle(pen, x, y, a, b);
  119.     }
  120. };
  121.  
  122. class vagon
  123. {
  124. private:
  125.     corpus* vag;
  126.     krug* left;
  127.     krug* right;
  128.     window* w_l;
  129.     window* w_r;
  130.     doors* durka;
  131. public:
  132.     vagon() {}
  133.     vagon(int _x, int _y, int h)
  134.     {
  135.         vag = new corpus(_x, _y, h);
  136.         left = new krug(_x + 1*h, _y + 11*h, h);
  137.         right = new krug(_x + 16*h, _y + 11*h, h);
  138.         w_l = new window(_x + 2*h, _y + 3*h, h);
  139.         w_r = new window(_x + 8*h, _y + 3*h, h);
  140.         durka = new doors(_x + 16*h, _y + 4*h, h);
  141.     }
  142.     void draw(Graphics^ g)
  143.     {
  144.         vag->draw(g);
  145.         left->draw(g);
  146.         right->draw(g);
  147.         w_l->draw(g);
  148.         w_r->draw(g);
  149.         durka->draw(g);
  150.     }
  151.     void move(int dx)
  152.     {
  153.         vag->move(dx);
  154.         left->move(dx);
  155.         right->move(dx);
  156.         w_l->move(dx);
  157.         w_r->move(dx);
  158.         durka->move(dx);
  159.     }
  160.     ~vagon() {}
  161. };
  162.  
  163. class line
  164. {
  165. private:
  166.     int x_first; int y_first;
  167.     int x_last; int y_last;
  168. public:
  169.     line(int xfirst = 0, int yfirst = 0, int xlast = 0, int ylast = 0)
  170.     {
  171.         x_first = xfirst; y_first = yfirst;
  172.         x_last = xlast; y_last = ylast;
  173.     }
  174.     void move(int dx_first, int dy_first = 0, int dx_last = 0, int dy_last = 0)
  175.     {
  176.         x_first += dx_first; y_first += dy_first; x_last += dx_last; y_last += dy_last;
  177.     }
  178.     void draw(Graphics^ g)
  179.     {
  180.         Color^ col = gcnew Color();
  181.         Pen^ pen = gcnew Pen(col->Black, 4);
  182.         g->DrawLine(pen, x_first, y_first, x_last, y_last);
  183.     }
  184.     int lenghts()
  185.     {
  186.         int t = sqrt((x_first - x_last) * (x_first - x_last) + (y_first - y_last) * (y_first - y_last));
  187.         return t;
  188.     }
  189.     int Getxleft()
  190.     {
  191.         return x_first;
  192.     }
  193.     int Getyleft()
  194.     {
  195.         return y_first;
  196.     }
  197.     int Getxright()
  198.     {
  199.         return x_last;
  200.     }
  201.     int Getyright()
  202.     {
  203.         return y_last;
  204.     }
  205. };
  206.  
  207. class engine
  208. {
  209. private:
  210.     line left; line right; line middle;
  211. public:
  212.     engine() {}
  213.     engine(int x, int y, int h)
  214.     {
  215.         left = line(x, y, x, y - h);
  216.         right = line((x + 15 * h), y, (x + 15 * h), y - h);
  217.         middle = line(x, y - h, (x + 15 * h), y - h);
  218.     }
  219.     void move(int dx)
  220.     {
  221.         int lenght = left.lenghts();
  222.         float dx_c = lenght - left.lenghts() * cos(dx / (2 * left.lenghts()));
  223.         float dy_c = left.lenghts() * sin(dx / (2 * left.lenghts()));
  224.         left.move(dx, 0, dx + dx_c, dy_c);
  225.         right.move(dx, 0, dx + dx_c, dy_c);
  226.         middle.move(dx + dx_c, dy_c, dx + dx_c, dy_c);
  227.     }
  228.     void draw(Graphics^ g)
  229.     {
  230.         left.draw(g);
  231.         right.draw(g);
  232.         middle.draw(g);
  233.     }
  234. };
  235.  
  236. class parovoz
  237. {
  238. private:
  239.     vagon vg; truba tr; engine eg;
  240. public:
  241.     parovoz(int x = 0, int y = 0, int h = 0)
  242.     {
  243.         vg = vagon(x, y, h);
  244.         tr = truba(x + h, y - 3 * h, h);
  245.         eg = engine(x + 3 * h, y + 13 * h, h);
  246.     }
  247.     void move(int dx)
  248.     {
  249.         vg.move(dx);
  250.         tr.move(dx);
  251.         eg.move(dx);
  252.     }
  253.     void draw(Graphics^ g)
  254.     {
  255.         vg.draw(g);
  256.         tr.draw(g);
  257.         eg.draw(g);
  258.     }
  259. };
  260. //con = cp
  261. class con
  262. {
  263. private:
  264.     line ln;
  265. public:
  266.     con(int x = 0, int y = 0, int h = 0)
  267.     {
  268.         ln = line(x, y, x + 4 * h, y);
  269.     }
  270.     void draw(Graphics^ g)
  271.     {
  272.         Color^ col = gcnew Color();
  273.         Pen^ pen = gcnew Pen(col->Black);
  274.         g->DrawLine(pen, ln.Getxleft(), ln.Getyleft(), ln.Getxright(), ln.Getyright());
  275.     }
  276.     void move(int dx)
  277.     {
  278.         ln.move(dx, 0, dx, 0);
  279.     }
  280. };
  281. // vag = vg
  282. class train
  283. {
  284. private:
  285.     parovoz pr;
  286.     vagon* vag;
  287.     con* c;
  288.     int size;
  289. public:
  290.     train(int x, int y, int h, int n)
  291.     {
  292.         pr = parovoz(x - 21 * h, y - 11 * h, h);
  293.         vag = new vagon[n];
  294.         c = new con[n];
  295.         for (int i = 0; i < n; i++)
  296.         {
  297.             vag[i] = vagon(x - (i + 2) * 21 * h - (i + 1) * h, y - 11 * h, h);
  298.             c[i] = con(x - (i + 1) * 24 * h, y, h);
  299.         }
  300.         size = n;
  301.     }
  302.     train(const train &tmp)
  303.     {
  304.         size = tmp.size;
  305.         pr = tmp.pr;
  306.         vag = new vagon[tmp.size];
  307.         c = new con[tmp.size];
  308.         for (int i = 0; i < tmp.size; i++)
  309.         {
  310.             vag[i] = tmp.vag[i];
  311.             c[i] = tmp.c[i];
  312.         }
  313.     }
  314.     train& operator=(train tmp)
  315.     {
  316.         if (size != tmp.size)
  317.         {
  318.             if (size != 0)
  319.             {
  320.                 delete[] vag;
  321.                 delete[] c;
  322.             }
  323.             size = tmp.size;
  324.             vag = new vagon[size];
  325.             c = new con[size];
  326.         }
  327.         for (int i = 0; i < size; i++)
  328.         {
  329.             vag[i] = tmp.vag[i];
  330.             c[i] = tmp.c[i];
  331.         }
  332.         return *this;
  333.     }
  334.     void draw(Graphics^ g)
  335.     {
  336.         pr.draw(g);
  337.         for (int i = 0; i < size; i++)
  338.         {
  339.             vag[i].draw(g);
  340.             c[i].draw(g);
  341.         }
  342.     }
  343.     void move(int dx)
  344.     {
  345.         pr.move(dx);
  346.         for (int i = 0; i < size; i++)
  347.         {
  348.             vag[i].move(dx);
  349.             c[i].move(dx);
  350.         }
  351.     }
  352.     ~train()
  353.     {
  354.         delete[] vag;
  355.         delete[] c;
  356.     }
  357. };
Add Comment
Please, Sign In to add comment