#include "Ground.h" #include "Crater.h" #include "ScreenSingleton.h" #include "enums/CraterSize.h" #include "MyTools.h" #include void Ground::Draw() const { ScreenSingleton::getInstance().SetColor(CC_Green); const size_t bufSize = width + 1; char* buf = new (std::nothrow) char[bufSize]; if (buf == nullptr) { return; } if (vecCrates.size() == 0) { ScreenSingleton::getInstance().GotoXY(x, y); memset(buf, '=', bufSize); buf[bufSize - 1] = '\0'; std::cout << buf; } else { const size_t X = size_t(x); char c; for (size_t i = X; i < width + X; i++) { c = (isInsideAnyCrater((double)i)) ? ' ' : '='; buf[i - X] = c; } ScreenSingleton::getInstance().GotoXY((double)X, y); buf[bufSize-1] = '\0'; std::cout << buf; for (size_t i = 0; i < vecCrates.size(); i++) { vecCrates[i].Draw(); } } delete[] buf; } bool Ground::isInsideAnyCrater(double x) const { bool isInside = false; for (size_t i = 0; i < vecCrates.size(); i++) { if (vecCrates[i].isInside(x)) { isInside = true; break; } } return isInside; } void Ground::AddCrater(double xn) { Crater cr; cr.SetPos(int(xn), y); cr.SetWidth(SMALL_CRATER_SIZE); vecCrates.push_back(cr); }