Advertisement
baadgeorge

классы цпп

Jun 4th, 2021
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 26.72 KB | None | 0 0
  1. #include <windows.h>
  2. #include "Classes.h"
  3. #include <math.h>
  4.  
  5. #define KEY_DOWN(vk_code)((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
  6. #define PI 3.1415926535
  7.  
  8. extern HDC hdc;
  9.  
  10. //
  11. //методы класса Location
  12. //
  13. Location::Location(int _X, int _Y) //конструктор
  14. {
  15.     X = _X;
  16.     Y = _Y;
  17. }
  18.  
  19. Location::~Location() {} //деструктор
  20.  
  21. int Location::GetX() //функция получения значения Х
  22. {
  23.     return X;
  24. }
  25.  
  26. int Location::GetY() //функция получения значения Y
  27. {
  28.     return Y;
  29. }
  30.  
  31. void Location::SetX(int _X) //функция задания значения Х
  32. {
  33.     X = _X;
  34. }
  35. void Location::SetY(int _Y) //функция задания значения Y
  36. {
  37.     Y = _Y;
  38. }
  39.  
  40. //
  41. //методы класса Location
  42. //
  43.  
  44. Point::Point(int _X, int _Y) : Location(_X, _Y) //конструктор
  45. {
  46.     isVisible = false;
  47. }
  48.  
  49. Point::~Point() {} //деструктор
  50.  
  51. void Point::Show() //функция отображения точки
  52. {
  53.     isVisible = true;
  54.     SetPixel(hdc, X, Y, RGB(0, 0, 255));
  55. }
  56.  
  57. void Point::Hide() //функция скрытия точки
  58. {
  59.     isVisible = false;
  60.     SetPixel(hdc, X, Y, RGB(255, 0, 0));
  61. }
  62.  
  63. void Point::MoveTo(int NewX, int NewY) //функция перемещения точки по новым координатам
  64. {
  65.     Hide();
  66.     X = NewX;
  67.     Y = NewY;
  68.     Show();
  69. }
  70.  
  71. void Point::Drag(int Step) //функция движения точки
  72. {
  73.     int FigX, FigY;
  74.     FigX = GetX();
  75.     FigY = GetY();
  76.    
  77.     if (KEY_DOWN(VK_LEFT))
  78.     {
  79.         FigX -= Step;
  80.         MoveTo(FigX, FigY);
  81.     }
  82.     if (KEY_DOWN(VK_RIGHT))
  83.     {
  84.         FigX += Step;
  85.         MoveTo(FigX, FigY);
  86.     }
  87.     if (KEY_DOWN(VK_DOWN))
  88.     {
  89.         FigY += Step;
  90.         MoveTo(FigX, FigY);
  91.     }
  92.     if (KEY_DOWN(VK_UP))
  93.     {
  94.         FigY -= Step;
  95.         MoveTo(FigX, FigY);
  96.     }
  97. }
  98.  
  99. //
  100. //методы класса Wheel
  101. //
  102.  
  103. Wheel::Wheel(int _X, int _Y, int _Radius) : Point(_X, _Y) //конструктор
  104. {
  105.     Radius = _Radius;
  106.     Angle = 0.0;
  107. }
  108.  
  109. Wheel::~Wheel() {} //деструктор
  110.  
  111. void Wheel::Show() //функция отображения колеса
  112. {
  113.     HPEN pen;
  114.     HBRUSH brush;
  115.  
  116.     SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
  117.     pen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
  118.     SelectObject(hdc, pen);
  119.     Ellipse(hdc, X - 50 * Radius, Y + 50 * Radius, X + 50 * Radius, Y - 50 * Radius);
  120.  
  121.     brush = CreateSolidBrush(RGB(0, 0, 0));
  122.     SelectObject(hdc, brush);
  123.     Ellipse(hdc, X - 5 * Radius, Y + 5 * Radius, X + 5 * Radius, Y - 5 * Radius);
  124.  
  125.     SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
  126.     pen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
  127.     int line = 115 * Radius;
  128.     int lineRadius = line / 2;
  129.  
  130.     MoveToEx(hdc, X + lineRadius * cos(Angle * PI / 180), Y + lineRadius * sin(Angle * PI / 180), NULL);
  131.     LineTo(hdc, X - lineRadius * cos(Angle * PI / 180), Y - lineRadius * sin(Angle * PI / 180));
  132.  
  133.     MoveToEx(hdc, X + lineRadius * cos((Angle + 90) * PI / 180), Y + lineRadius * sin((Angle + 90) * PI / 180), NULL);
  134.     LineTo(hdc, X - lineRadius * cos((Angle + 90) * PI / 180), Y - lineRadius * sin((Angle + 90) * PI / 180));
  135.  
  136.     DeleteObject(pen);
  137.     DeleteObject(brush);
  138. }
  139.  
  140. void Wheel::Hide() //функция скрытия колеса
  141. {
  142.     HBRUSH rubber = CreateSolidBrush(RGB(243, 243, 243));
  143.     HPEN pen = CreatePen(PS_SOLID, 3, RGB(243, 243, 243));
  144.     SelectObject(hdc, pen);
  145.     SelectObject(hdc, rubber);
  146.     MoveToEx(hdc, X, Y, NULL);
  147.     int line = 115 * Radius;
  148.     int lineRadius = line / 2;
  149.  
  150.     MoveToEx(hdc, X + lineRadius * cos(Angle * PI / 180), Y + lineRadius * sin(Angle * PI / 180), NULL);
  151.     LineTo(hdc, X - lineRadius * cos(Angle * PI / 180), Y - lineRadius * sin(Angle * PI / 180));
  152.  
  153.     MoveToEx(hdc, X + lineRadius * cos((Angle + 90) * PI / 180), Y + lineRadius * sin((Angle + 90) * PI / 180), NULL);
  154.     LineTo(hdc, X - lineRadius * cos((Angle + 90) * PI / 180), Y - lineRadius * sin((Angle + 90) * PI / 180));
  155.  
  156.     DeleteObject(pen);
  157.     DeleteObject(rubber);
  158. }
  159.  
  160. void Wheel::SetAngle(double _Angle) //функция задания угла
  161. {
  162.     Angle = _Angle;
  163. }
  164.  
  165. double Wheel::GetAngle() //функция получения угла
  166. {
  167.     return Angle;
  168. }
  169.  
  170. //
  171. //методы класса Grinder
  172. //
  173.  
  174. Grinder::Grinder(int _X, int _Y, int _Scale, double _Angle) : Point(_X, _Y), wheel(_X, _Y, _Scale) //конструктор
  175. {
  176.     Scale = _Scale;
  177.     wheel.SetAngle(_Angle);
  178.     isRotating = true;
  179. }
  180.  
  181. Grinder::~Grinder() {} //деструктор
  182.  
  183. void Grinder::Vent(HPEN penVent, HBRUSH brushVent) //функция отображения трубы мельницы
  184. {
  185.     //vent
  186.     SelectObject(hdc, penVent);
  187.     SelectObject(hdc, brushVent);
  188.     Rectangle(hdc, X + 440 * Scale, Y + 200 * Scale, X + 460 * Scale, Y + 100 * Scale);
  189. }
  190.  
  191. void Grinder::Top(HBRUSH brushTop) //функция отображения крыши мельницы
  192. {
  193.     //top
  194.     SelectObject(hdc, brushTop);
  195.     POINT vertices[] = { {X + 400 * Scale, Y + 100 * Scale}, {X + 500 * Scale, Y + 200 * Scale}, {X + 300 * Scale, Y + 200 * Scale} };
  196.     Polygon(hdc, vertices, sizeof(vertices) / sizeof(vertices[0]));
  197. }
  198.  
  199. void Grinder::Bottom(HBRUSH brushBottom) //функция отображения основания мельницы
  200. {
  201.     //bottom
  202.     SelectObject(hdc, brushBottom);
  203.     Rectangle(hdc, X + 305 * Scale, Y + 200 * Scale, X + 495 * Scale, Y + 320 * Scale);
  204. }
  205.  
  206.  
  207. void Grinder::Window(HPEN penWindow, HBRUSH brushWindow) //функция отображения окна мельницы
  208. {
  209.     //window
  210.     SelectObject(hdc, brushWindow);
  211.     Rectangle(hdc, X + 365 * Scale, Y + 230 * Scale, X + 435 * Scale, Y + 290 * Scale);
  212.     SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
  213.     SelectObject(hdc, penWindow);
  214.     MoveToEx(hdc, X + 400 * Scale, Y + 230 * Scale, NULL);
  215.     LineTo(hdc, X + 400 * Scale, Y + 290 * Scale);
  216.     MoveToEx(hdc, X + 365 * Scale, Y + 260 * Scale, NULL);
  217.     LineTo(hdc, X + 435 * Scale, Y + 260 * Scale);
  218.     MoveToEx(hdc, X, Y, NULL);
  219. }
  220.  
  221. void Grinder::Outbuilding(HPEN penOutbuilding, HBRUSH brushOutbuilding ) //функция отображения пристройки мельницы
  222. {
  223.     //outbilding
  224.     SelectObject(hdc, brushOutbuilding);
  225.     SelectObject(hdc, penOutbuilding);
  226.     Rectangle(hdc, X + 495 * Scale, Y + 320 * Scale, X + 550 * Scale, Y + 250 * Scale);
  227. }
  228.  
  229. void Grinder::WheelShow() //функция отображения колеса мельницы
  230. {
  231.     //wheel
  232.     wheel.SetX(X + 525 * Scale);
  233.     wheel.SetY(Y + 300 * Scale);
  234.     wheel.Show();
  235. }
  236.  
  237. bool Grinder::GetRotation() //функция получения информации о вращении колеса
  238. {
  239.     return isRotating;
  240. }
  241.  
  242. void Grinder::SetRotation(bool _flag) //функция установки состояния колеса(вращается или нет)
  243. {
  244.     isRotating = _flag;
  245. }
  246.  
  247. void Grinder::Show() //функция отображения мельницы
  248. {
  249.     isVisible = true;
  250.     HPEN penVent = CreatePen(PS_SOLID, 1, RGB(0, 255, 255));
  251.     HBRUSH brushVent = CreateSolidBrush(RGB(255, 0, 0));
  252.     HBRUSH brushTop = CreateSolidBrush(RGB(0, 0, 255));
  253.     HBRUSH brushBottom = CreateSolidBrush(RGB(255, 155, 0));
  254.     HBRUSH brushWindow = CreateSolidBrush(RGB(155, 0, 255));
  255.     HPEN penWindow = CreatePen(PS_SOLID, 2, RGB(0, 255, 255));
  256.     HBRUSH brushOutbuilding = CreateSolidBrush(RGB(60, 155, 30));
  257.     HPEN penOutbuilding = CreatePen(PS_SOLID, 1, RGB(0, 255, 255));
  258.  
  259.     Vent(penVent, brushVent);
  260.     Top(brushTop);
  261.     Bottom(brushBottom);
  262.     Window(penWindow, brushWindow);
  263.     Outbuilding(penOutbuilding, brushOutbuilding);
  264.     WheelShow();
  265.    
  266.     DeleteObject(penVent);
  267.     DeleteObject(brushVent);
  268.     DeleteObject(brushTop);
  269.     DeleteObject(brushBottom);
  270.     DeleteObject(brushWindow);
  271.     DeleteObject(penWindow);
  272.     DeleteObject(brushOutbuilding);
  273.     DeleteObject(penOutbuilding);
  274. }
  275.  
  276. void Grinder::Hide() //функция скрытия мельниц
  277. {
  278.     HBRUSH rubber = CreateSolidBrush(RGB(243, 243, 243));
  279.     HPEN pen = CreatePen(PS_SOLID, 1, RGB(243, 243, 243));
  280.  
  281.     SelectObject(hdc, pen);
  282.     SelectObject(hdc, rubber);
  283.     MoveToEx(hdc, X, Y, NULL);
  284.     Rectangle(hdc, X + 300, Y + 100 * Scale, X + 600 * Scale, Y + 360 * Scale);
  285.  
  286.     DeleteObject(pen);
  287.     DeleteObject(rubber);
  288. }
  289.  
  290. double Grinder::GetAngleWH() //функция получения информации о текущем угле колеса
  291. {
  292.     return wheel.GetAngle();
  293. }
  294.  
  295. void Grinder::SetAngleWH(double _Angle) //функция задания текущего угла колеса
  296. {
  297.     wheel.SetAngle(_Angle);
  298. }
  299.  
  300. //
  301. //методы класса GrinderDamage
  302. //
  303.  
  304. GrinderDamage::GrinderDamage(int _X, int _Y, int _Scale, double _Angle) : Grinder(_X, _Y, _Scale, _Angle)
  305. {
  306. }
  307.  
  308. GrinderDamage::~GrinderDamage() {}
  309.  
  310. void GrinderDamage::Vent(HPEN penVent, HBRUSH brushVen)
  311. {
  312.     return;
  313. }
  314.  
  315. //
  316. //методы класса Object
  317. //
  318.  
  319. Object::Object(int _X, int _Y, int _Scale) : Point(_X, _Y) //конструктор
  320. {
  321.     X = _X;
  322.     Y = _Y;
  323.     Scale = _Scale;
  324.     ObjectType = -1;
  325. }
  326.  
  327. Object::~Object() {}
  328.  
  329. void Object::Hide() //функция скрытия камня
  330. {
  331.     HBRUSH rubber = CreateSolidBrush(RGB(0, 125, 255));
  332.     HPEN pen = CreatePen(PS_SOLID, 1, RGB(0, 125, 255));
  333.     SelectObject(hdc, pen);
  334.     SelectObject(hdc, rubber);
  335.     MoveToEx(hdc, X, Y, NULL);
  336.  
  337.     Ellipse(hdc, X - 150 * Scale, Y + 340 * Scale, X - 100 * Scale, Y + 380 * Scale);
  338.  
  339.     DeleteObject(pen);
  340.     DeleteObject(rubber);
  341. }
  342.  
  343. double Object::GetScale() //функция получения масштаба
  344. {
  345.     return Scale;
  346. }
  347.  
  348. void Object::SetScale(double _Scale) //функция получения масштаба
  349. {
  350.     SetScale(_Scale);
  351. }
  352.  
  353. double Object::GetType() //функция получения типа
  354. {
  355.     return ObjectType;
  356. }
  357.  
  358.  
  359. //
  360. //методы класса Rock
  361. //
  362.  
  363. Rock::Rock(int _X, int _Y, int _Scale) : Object(_X, _Y, _Scale) //конструктор
  364. {
  365.     X = _X;
  366.     Y = _Y;
  367.     Scale = _Scale;
  368.     ObjectType = 0;
  369. }
  370.  
  371. Rock::~Rock() {} //деструктор
  372.  
  373. void Rock::Show() //функция отображения камня
  374. {
  375.     HPEN pen;
  376.     pen = CreatePen(PS_SOLID, 1, RGB(0, 255, 155));
  377.     SelectObject(hdc, pen);
  378.     HBRUSH brush;
  379.     brush = CreateSolidBrush(RGB(155, 0, 0));
  380.     SelectObject(hdc, brush);
  381.  
  382.     Ellipse(hdc, X - 150 * Scale, Y + 340 * Scale, X - 100 * Scale, Y + 380 * Scale);
  383.  
  384.     DeleteObject(pen);
  385.     DeleteObject(brush);
  386. }
  387.  
  388.  
  389.  
  390. //
  391. //методы класса Wave
  392. //
  393.  
  394. Wave::Wave(int _X, int _Y, int _Scale) : Object(_X, _Y, _Scale) //конструктор
  395. {
  396.     X = _X;
  397.     Y = _Y;
  398.     Scale = _Scale;
  399.     ObjectType = 1;
  400. }
  401.  
  402. Wave::~Wave() {} //деструктор
  403.  
  404. void Wave::Show() //функция отображения волны
  405. {
  406.     HPEN pen;
  407.     pen = CreatePen(PS_SOLID, 1, RGB(0, 255, 255));
  408.     SelectObject(hdc, pen);
  409.     HBRUSH brush;
  410.     MoveToEx(hdc, X, Y, NULL);
  411.     brush = CreateSolidBrush(RGB(0, 0, 255));
  412.     SelectObject(hdc, brush);
  413.     Ellipse(hdc, X - 150 * Scale, Y + 340 * Scale, X - 100 * Scale, Y + 380 * Scale);
  414.  
  415.     DeleteObject(pen);
  416.     DeleteObject(brush);
  417. }
  418.  
  419. //
  420. //методы класса Health_mode
  421. //
  422.  
  423. Health_mode::Health_mode(int _X, int _Y, int _Scale) : Object(_X, _Y, _Scale) //конструктор
  424. {
  425.     X = _X;
  426.     Y = _Y;
  427.     Scale = _Scale;
  428.     ObjectType = 2;
  429. }
  430.  
  431. Health_mode::~Health_mode() {} //деструктор
  432.  
  433. void Health_mode::Show() //функция отображения модуля здоровья
  434. {
  435.     HPEN pen;
  436.     pen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
  437.     SelectObject(hdc, pen);
  438.     HBRUSH brush;
  439.     MoveToEx(hdc, X, Y, NULL);
  440.     brush = CreateSolidBrush(RGB(0, 255, 0));
  441.     SelectObject(hdc, brush);
  442.     Ellipse(hdc, X - 150 * Scale, Y + 340 * Scale, X - 100 * Scale, Y + 380 * Scale);
  443.     DeleteObject(pen);
  444.     DeleteObject(brush);
  445. }
  446.  
  447.  
  448. //
  449. //методы класса Health_mode
  450. //
  451.  
  452. River::River(int _X, int _Y, int _Scale) : Point(_X, _Y) //конструктор
  453. {
  454.     X = _X;
  455.     Y = _Y;
  456.     Scale = _Scale;
  457. }
  458.  
  459. River::~River() {} //деструктор
  460.  
  461. void River::Show() //функция отображения реки
  462. {
  463.     HBRUSH brush = CreateSolidBrush(RGB(0, 125, 255));
  464.     SelectObject(hdc, brush);
  465.     Rectangle(hdc, X - 290 * Scale, Y + 320 * Scale, X + 680 * Scale, Y + 470 * Scale);
  466.     DeleteObject(brush);
  467. }
  468.  
  469. void River::Hide() //функция скрытия реки
  470. {
  471.     HBRUSH brush = CreateSolidBrush(RGB(243, 243, 243));
  472.     HPEN pen = CreatePen(PS_SOLID, 3, RGB(243, 243, 243));
  473.     SelectObject(hdc, pen);
  474.     SelectObject(hdc, brush);
  475.     Rectangle(hdc, X - 290 * Scale, Y + 320 * Scale, X + 660 * Scale, Y + 450 * Scale);
  476.     DeleteObject(pen);
  477.     DeleteObject(brush);
  478. }
  479.  
  480. //
  481. //методы класса Catcher
  482. //
  483.  
  484. Catcher::Catcher(int _X, int _Y, int _Scale) : Point(_X, _Y)
  485. {
  486.     X = _X;
  487.     Y = _Y;
  488.     Scale = _Scale;
  489. }
  490.  
  491. Catcher::~Catcher()
  492. {
  493. }
  494.  
  495. void Catcher::Show() //функция отображения ловца
  496. {
  497.     HPEN pen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
  498.     HBRUSH brush = CreateSolidBrush(RGB(215, 225, 0));
  499.     SelectObject(hdc, pen);
  500.     SelectObject(hdc, brush);
  501.     Rectangle(hdc, X - 20 * Scale, Y + 330 * Scale, X + 20 * Scale, Y + 390 * Scale);
  502.     DeleteObject(pen);
  503.     DeleteObject(brush);
  504. }
  505.  
  506. void Catcher::Hide() //функция скрытия ловца
  507. {
  508.     HBRUSH brush = CreateSolidBrush(RGB(243, 243, 243));
  509.     HPEN pen = CreatePen(PS_SOLID, 3, RGB(243, 243, 243));
  510.     SelectObject(hdc, pen);
  511.     SelectObject(hdc, brush);
  512.     Rectangle(hdc, X - 20 * Scale, Y + 330 * Scale, X + 20 * Scale, Y + 390 * Scale);
  513.     DeleteObject(pen);
  514.     DeleteObject(brush);
  515. }
  516.  
  517. int Catcher::GetScale() //функция получения масштаба
  518. {
  519.     return Scale;
  520. }
  521.  
  522. void Catcher::SetScale(int _Scale) //функция задания масштаба
  523. {
  524.     Scale = _Scale;
  525. }
  526. #include <windows.h>
  527. #include "Classes.h"
  528. #include <math.h>
  529.  
  530. #define KEY_DOWN(vk_code)((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
  531. #define PI 3.1415926535
  532.  
  533. extern HDC hdc;
  534.  
  535. //
  536. //методы класса Location
  537. //
  538. Location::Location(int _X, int _Y) //конструктор
  539. {
  540.     X = _X;
  541.     Y = _Y;
  542. }
  543.  
  544. Location::~Location() {} //деструктор
  545.  
  546. int Location::GetX() //функция получения значения Х
  547. {
  548.     return X;
  549. }
  550.  
  551. int Location::GetY() //функция получения значения Y
  552. {
  553.     return Y;
  554. }
  555.  
  556. void Location::SetX(int _X) //функция задания значения Х
  557. {
  558.     X = _X;
  559. }
  560. void Location::SetY(int _Y) //функция задания значения Y
  561. {
  562.     Y = _Y;
  563. }
  564.  
  565. //
  566. //методы класса Location
  567. //
  568.  
  569. Point::Point(int _X, int _Y) : Location(_X, _Y) //конструктор
  570. {
  571.     isVisible = false;
  572. }
  573.  
  574. Point::~Point() {} //деструктор
  575.  
  576. void Point::Show() //функция отображения точки
  577. {
  578.     isVisible = true;
  579.     SetPixel(hdc, X, Y, RGB(0, 0, 255));
  580. }
  581.  
  582. void Point::Hide() //функция скрытия точки
  583. {
  584.     isVisible = false;
  585.     SetPixel(hdc, X, Y, RGB(255, 0, 0));
  586. }
  587.  
  588. void Point::MoveTo(int NewX, int NewY) //функция перемещения точки по новым координатам
  589. {
  590.     Hide();
  591.     X = NewX;
  592.     Y = NewY;
  593.     Show();
  594. }
  595.  
  596. void Point::Drag(int Step) //функция движения точки
  597. {
  598.     int FigX, FigY;
  599.     FigX = GetX();
  600.     FigY = GetY();
  601.    
  602.     if (KEY_DOWN(VK_LEFT))
  603.     {
  604.         FigX -= Step;
  605.         MoveTo(FigX, FigY);
  606.     }
  607.     if (KEY_DOWN(VK_RIGHT))
  608.     {
  609.         FigX += Step;
  610.         MoveTo(FigX, FigY);
  611.     }
  612.     if (KEY_DOWN(VK_DOWN))
  613.     {
  614.         FigY += Step;
  615.         MoveTo(FigX, FigY);
  616.     }
  617.     if (KEY_DOWN(VK_UP))
  618.     {
  619.         FigY -= Step;
  620.         MoveTo(FigX, FigY);
  621.     }
  622. }
  623.  
  624. //
  625. //методы класса Wheel
  626. //
  627.  
  628. Wheel::Wheel(int _X, int _Y, int _Radius) : Point(_X, _Y) //конструктор
  629. {
  630.     Radius = _Radius;
  631.     Angle = 0.0;
  632. }
  633.  
  634. Wheel::~Wheel() {} //деструктор
  635.  
  636. void Wheel::Show() //функция отображения колеса
  637. {
  638.     HPEN pen;
  639.     HBRUSH brush;
  640.  
  641.     SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
  642.     pen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
  643.     SelectObject(hdc, pen);
  644.     Ellipse(hdc, X - 50 * Radius, Y + 50 * Radius, X + 50 * Radius, Y - 50 * Radius);
  645.  
  646.     brush = CreateSolidBrush(RGB(0, 0, 0));
  647.     SelectObject(hdc, brush);
  648.     Ellipse(hdc, X - 5 * Radius, Y + 5 * Radius, X + 5 * Radius, Y - 5 * Radius);
  649.  
  650.     SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
  651.     pen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
  652.     int line = 115 * Radius;
  653.     int lineRadius = line / 2;
  654.  
  655.     MoveToEx(hdc, X + lineRadius * cos(Angle * PI / 180), Y + lineRadius * sin(Angle * PI / 180), NULL);
  656.     LineTo(hdc, X - lineRadius * cos(Angle * PI / 180), Y - lineRadius * sin(Angle * PI / 180));
  657.  
  658.     MoveToEx(hdc, X + lineRadius * cos((Angle + 90) * PI / 180), Y + lineRadius * sin((Angle + 90) * PI / 180), NULL);
  659.     LineTo(hdc, X - lineRadius * cos((Angle + 90) * PI / 180), Y - lineRadius * sin((Angle + 90) * PI / 180));
  660.  
  661.     DeleteObject(pen);
  662.     DeleteObject(brush);
  663. }
  664.  
  665. void Wheel::Hide() //функция скрытия колеса
  666. {
  667.     HBRUSH rubber = CreateSolidBrush(RGB(243, 243, 243));
  668.     HPEN pen = CreatePen(PS_SOLID, 3, RGB(243, 243, 243));
  669.     SelectObject(hdc, pen);
  670.     SelectObject(hdc, rubber);
  671.     MoveToEx(hdc, X, Y, NULL);
  672.     int line = 115 * Radius;
  673.     int lineRadius = line / 2;
  674.  
  675.     MoveToEx(hdc, X + lineRadius * cos(Angle * PI / 180), Y + lineRadius * sin(Angle * PI / 180), NULL);
  676.     LineTo(hdc, X - lineRadius * cos(Angle * PI / 180), Y - lineRadius * sin(Angle * PI / 180));
  677.  
  678.     MoveToEx(hdc, X + lineRadius * cos((Angle + 90) * PI / 180), Y + lineRadius * sin((Angle + 90) * PI / 180), NULL);
  679.     LineTo(hdc, X - lineRadius * cos((Angle + 90) * PI / 180), Y - lineRadius * sin((Angle + 90) * PI / 180));
  680.  
  681.     DeleteObject(pen);
  682.     DeleteObject(rubber);
  683. }
  684.  
  685. void Wheel::SetAngle(double _Angle) //функция задания угла
  686. {
  687.     Angle = _Angle;
  688. }
  689.  
  690. double Wheel::GetAngle() //функция получения угла
  691. {
  692.     return Angle;
  693. }
  694.  
  695. //
  696. //методы класса Grinder
  697. //
  698.  
  699. Grinder::Grinder(int _X, int _Y, int _Scale, double _Angle) : Point(_X, _Y), wheel(_X, _Y, _Scale) //конструктор
  700. {
  701.     Scale = _Scale;
  702.     wheel.SetAngle(_Angle);
  703.     isRotating = true;
  704. }
  705.  
  706. Grinder::~Grinder() {} //деструктор
  707.  
  708. void Grinder::Vent(HPEN penVent, HBRUSH brushVent) //функция отображения трубы мельницы
  709. {
  710.     //vent
  711.     SelectObject(hdc, penVent);
  712.     SelectObject(hdc, brushVent);
  713.     Rectangle(hdc, X + 440 * Scale, Y + 200 * Scale, X + 460 * Scale, Y + 100 * Scale);
  714. }
  715.  
  716. void Grinder::Top(HBRUSH brushTop) //функция отображения крыши мельницы
  717. {
  718.     //top
  719.     SelectObject(hdc, brushTop);
  720.     POINT vertices[] = { {X + 400 * Scale, Y + 100 * Scale}, {X + 500 * Scale, Y + 200 * Scale}, {X + 300 * Scale, Y + 200 * Scale} };
  721.     Polygon(hdc, vertices, sizeof(vertices) / sizeof(vertices[0]));
  722. }
  723.  
  724. void Grinder::Bottom(HBRUSH brushBottom) //функция отображения основания мельницы
  725. {
  726.     //bottom
  727.     SelectObject(hdc, brushBottom);
  728.     Rectangle(hdc, X + 305 * Scale, Y + 200 * Scale, X + 495 * Scale, Y + 320 * Scale);
  729. }
  730.  
  731.  
  732. void Grinder::Window(HPEN penWindow, HBRUSH brushWindow) //функция отображения окна мельницы
  733. {
  734.     //window
  735.     SelectObject(hdc, brushWindow);
  736.     Rectangle(hdc, X + 365 * Scale, Y + 230 * Scale, X + 435 * Scale, Y + 290 * Scale);
  737.     SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
  738.     SelectObject(hdc, penWindow);
  739.     MoveToEx(hdc, X + 400 * Scale, Y + 230 * Scale, NULL);
  740.     LineTo(hdc, X + 400 * Scale, Y + 290 * Scale);
  741.     MoveToEx(hdc, X + 365 * Scale, Y + 260 * Scale, NULL);
  742.     LineTo(hdc, X + 435 * Scale, Y + 260 * Scale);
  743.     MoveToEx(hdc, X, Y, NULL);
  744. }
  745.  
  746. void Grinder::Outbuilding(HPEN penOutbuilding, HBRUSH brushOutbuilding ) //функция отображения пристройки мельницы
  747. {
  748.     //outbilding
  749.     SelectObject(hdc, brushOutbuilding);
  750.     SelectObject(hdc, penOutbuilding);
  751.     Rectangle(hdc, X + 495 * Scale, Y + 320 * Scale, X + 550 * Scale, Y + 250 * Scale);
  752. }
  753.  
  754. void Grinder::WheelShow() //функция отображения колеса мельницы
  755. {
  756.     //wheel
  757.     wheel.SetX(X + 525 * Scale);
  758.     wheel.SetY(Y + 300 * Scale);
  759.     wheel.Show();
  760. }
  761.  
  762. bool Grinder::GetRotation() //функция получения информации о вращении колеса
  763. {
  764.     return isRotating;
  765. }
  766.  
  767. void Grinder::SetRotation(bool _flag) //функция установки состояния колеса(вращается или нет)
  768. {
  769.     isRotating = _flag;
  770. }
  771.  
  772. void Grinder::Show() //функция отображения мельницы
  773. {
  774.     isVisible = true;
  775.     HPEN penVent = CreatePen(PS_SOLID, 1, RGB(0, 255, 255));
  776.     HBRUSH brushVent = CreateSolidBrush(RGB(255, 0, 0));
  777.     HBRUSH brushTop = CreateSolidBrush(RGB(0, 0, 255));
  778.     HBRUSH brushBottom = CreateSolidBrush(RGB(255, 155, 0));
  779.     HBRUSH brushWindow = CreateSolidBrush(RGB(155, 0, 255));
  780.     HPEN penWindow = CreatePen(PS_SOLID, 2, RGB(0, 255, 255));
  781.     HBRUSH brushOutbuilding = CreateSolidBrush(RGB(60, 155, 30));
  782.     HPEN penOutbuilding = CreatePen(PS_SOLID, 1, RGB(0, 255, 255));
  783.  
  784.     Vent(penVent, brushVent);
  785.     Top(brushTop);
  786.     Bottom(brushBottom);
  787.     Window(penWindow, brushWindow);
  788.     Outbuilding(penOutbuilding, brushOutbuilding);
  789.     WheelShow();
  790.    
  791.     DeleteObject(penVent);
  792.     DeleteObject(brushVent);
  793.     DeleteObject(brushTop);
  794.     DeleteObject(brushBottom);
  795.     DeleteObject(brushWindow);
  796.     DeleteObject(penWindow);
  797.     DeleteObject(brushOutbuilding);
  798.     DeleteObject(penOutbuilding);
  799. }
  800.  
  801. void Grinder::Hide() //функция скрытия мельниц
  802. {
  803.     HBRUSH rubber = CreateSolidBrush(RGB(243, 243, 243));
  804.     HPEN pen = CreatePen(PS_SOLID, 1, RGB(243, 243, 243));
  805.  
  806.     SelectObject(hdc, pen);
  807.     SelectObject(hdc, rubber);
  808.     MoveToEx(hdc, X, Y, NULL);
  809.     Rectangle(hdc, X + 300, Y + 100 * Scale, X + 600 * Scale, Y + 360 * Scale);
  810.  
  811.     DeleteObject(pen);
  812.     DeleteObject(rubber);
  813. }
  814.  
  815. double Grinder::GetAngleWH() //функция получения информации о текущем угле колеса
  816. {
  817.     return wheel.GetAngle();
  818. }
  819.  
  820. void Grinder::SetAngleWH(double _Angle) //функция задания текущего угла колеса
  821. {
  822.     wheel.SetAngle(_Angle);
  823. }
  824.  
  825. //
  826. //методы класса GrinderDamage
  827. //
  828.  
  829. GrinderDamage::GrinderDamage(int _X, int _Y, int _Scale, double _Angle) : Grinder(_X, _Y, _Scale, _Angle)
  830. {
  831. }
  832.  
  833. GrinderDamage::~GrinderDamage() {}
  834.  
  835. void GrinderDamage::Vent(HPEN penVent, HBRUSH brushVen)
  836. {
  837.     return;
  838. }
  839.  
  840. //
  841. //методы класса Object
  842. //
  843.  
  844. Object::Object(int _X, int _Y, int _Scale) : Point(_X, _Y) //конструктор
  845. {
  846.     X = _X;
  847.     Y = _Y;
  848.     Scale = _Scale;
  849.     ObjectType = -1;
  850. }
  851.  
  852. Object::~Object() {}
  853.  
  854. void Object::Hide() //функция скрытия камня
  855. {
  856.     HBRUSH rubber = CreateSolidBrush(RGB(0, 125, 255));
  857.     HPEN pen = CreatePen(PS_SOLID, 1, RGB(0, 125, 255));
  858.     SelectObject(hdc, pen);
  859.     SelectObject(hdc, rubber);
  860.     MoveToEx(hdc, X, Y, NULL);
  861.  
  862.     Ellipse(hdc, X - 150 * Scale, Y + 340 * Scale, X - 100 * Scale, Y + 380 * Scale);
  863.  
  864.     DeleteObject(pen);
  865.     DeleteObject(rubber);
  866. }
  867.  
  868. double Object::GetScale() //функция получения масштаба
  869. {
  870.     return Scale;
  871. }
  872.  
  873. void Object::SetScale(double _Scale) //функция получения масштаба
  874. {
  875.     SetScale(_Scale);
  876. }
  877.  
  878. double Object::GetType() //функция получения типа
  879. {
  880.     return ObjectType;
  881. }
  882.  
  883.  
  884. //
  885. //методы класса Rock
  886. //
  887.  
  888. Rock::Rock(int _X, int _Y, int _Scale) : Object(_X, _Y, _Scale) //конструктор
  889. {
  890.     X = _X;
  891.     Y = _Y;
  892.     Scale = _Scale;
  893.     ObjectType = 0;
  894. }
  895.  
  896. Rock::~Rock() {} //деструктор
  897.  
  898. void Rock::Show() //функция отображения камня
  899. {
  900.     HPEN pen;
  901.     pen = CreatePen(PS_SOLID, 1, RGB(0, 255, 155));
  902.     SelectObject(hdc, pen);
  903.     HBRUSH brush;
  904.     brush = CreateSolidBrush(RGB(155, 0, 0));
  905.     SelectObject(hdc, brush);
  906.  
  907.     Ellipse(hdc, X - 150 * Scale, Y + 340 * Scale, X - 100 * Scale, Y + 380 * Scale);
  908.  
  909.     DeleteObject(pen);
  910.     DeleteObject(brush);
  911. }
  912.  
  913.  
  914.  
  915. //
  916. //методы класса Wave
  917. //
  918.  
  919. Wave::Wave(int _X, int _Y, int _Scale) : Object(_X, _Y, _Scale) //конструктор
  920. {
  921.     X = _X;
  922.     Y = _Y;
  923.     Scale = _Scale;
  924.     ObjectType = 1;
  925. }
  926.  
  927. Wave::~Wave() {} //деструктор
  928.  
  929. void Wave::Show() //функция отображения волны
  930. {
  931.     HPEN pen;
  932.     pen = CreatePen(PS_SOLID, 1, RGB(0, 255, 255));
  933.     SelectObject(hdc, pen);
  934.     HBRUSH brush;
  935.     MoveToEx(hdc, X, Y, NULL);
  936.     brush = CreateSolidBrush(RGB(0, 0, 255));
  937.     SelectObject(hdc, brush);
  938.     Ellipse(hdc, X - 150 * Scale, Y + 340 * Scale, X - 100 * Scale, Y + 380 * Scale);
  939.  
  940.     DeleteObject(pen);
  941.     DeleteObject(brush);
  942. }
  943.  
  944. //
  945. //методы класса Health_mode
  946. //
  947.  
  948. Health_mode::Health_mode(int _X, int _Y, int _Scale) : Object(_X, _Y, _Scale) //конструктор
  949. {
  950.     X = _X;
  951.     Y = _Y;
  952.     Scale = _Scale;
  953.     ObjectType = 2;
  954. }
  955.  
  956. Health_mode::~Health_mode() {} //деструктор
  957.  
  958. void Health_mode::Show() //функция отображения модуля здоровья
  959. {
  960.     HPEN pen;
  961.     pen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
  962.     SelectObject(hdc, pen);
  963.     HBRUSH brush;
  964.     MoveToEx(hdc, X, Y, NULL);
  965.     brush = CreateSolidBrush(RGB(0, 255, 0));
  966.     SelectObject(hdc, brush);
  967.     Ellipse(hdc, X - 150 * Scale, Y + 340 * Scale, X - 100 * Scale, Y + 380 * Scale);
  968.     DeleteObject(pen);
  969.     DeleteObject(brush);
  970. }
  971.  
  972.  
  973. //
  974. //методы класса Health_mode
  975. //
  976.  
  977. River::River(int _X, int _Y, int _Scale) : Point(_X, _Y) //конструктор
  978. {
  979.     X = _X;
  980.     Y = _Y;
  981.     Scale = _Scale;
  982. }
  983.  
  984. River::~River() {} //деструктор
  985.  
  986. void River::Show() //функция отображения реки
  987. {
  988.     HBRUSH brush = CreateSolidBrush(RGB(0, 125, 255));
  989.     SelectObject(hdc, brush);
  990.     Rectangle(hdc, X - 290 * Scale, Y + 320 * Scale, X + 680 * Scale, Y + 470 * Scale);
  991.     DeleteObject(brush);
  992. }
  993.  
  994. void River::Hide() //функция скрытия реки
  995. {
  996.     HBRUSH brush = CreateSolidBrush(RGB(243, 243, 243));
  997.     HPEN pen = CreatePen(PS_SOLID, 3, RGB(243, 243, 243));
  998.     SelectObject(hdc, pen);
  999.     SelectObject(hdc, brush);
  1000.     Rectangle(hdc, X - 290 * Scale, Y + 320 * Scale, X + 660 * Scale, Y + 450 * Scale);
  1001.     DeleteObject(pen);
  1002.     DeleteObject(brush);
  1003. }
  1004.  
  1005. //
  1006. //методы класса Catcher
  1007. //
  1008.  
  1009. Catcher::Catcher(int _X, int _Y, int _Scale) : Point(_X, _Y)
  1010. {
  1011.     X = _X;
  1012.     Y = _Y;
  1013.     Scale = _Scale;
  1014. }
  1015.  
  1016. Catcher::~Catcher()
  1017. {
  1018. }
  1019.  
  1020. void Catcher::Show() //функция отображения ловца
  1021. {
  1022.     HPEN pen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
  1023.     HBRUSH brush = CreateSolidBrush(RGB(215, 225, 0));
  1024.     SelectObject(hdc, pen);
  1025.     SelectObject(hdc, brush);
  1026.     Rectangle(hdc, X - 20 * Scale, Y + 330 * Scale, X + 20 * Scale, Y + 390 * Scale);
  1027.     DeleteObject(pen);
  1028.     DeleteObject(brush);
  1029. }
  1030.  
  1031. void Catcher::Hide() //функция скрытия ловца
  1032. {
  1033.     HBRUSH brush = CreateSolidBrush(RGB(243, 243, 243));
  1034.     HPEN pen = CreatePen(PS_SOLID, 3, RGB(243, 243, 243));
  1035.     SelectObject(hdc, pen);
  1036.     SelectObject(hdc, brush);
  1037.     Rectangle(hdc, X - 20 * Scale, Y + 330 * Scale, X + 20 * Scale, Y + 390 * Scale);
  1038.     DeleteObject(pen);
  1039.     DeleteObject(brush);
  1040. }
  1041.  
  1042. int Catcher::GetScale() //функция получения масштаба
  1043. {
  1044.     return Scale;
  1045. }
  1046.  
  1047. void Catcher::SetScale(int _Scale) //функция задания масштаба
  1048. {
  1049.     Scale = _Scale;
  1050. }
  1051.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement