Работа с очередями в С++

206
10 октября 2017, 04:43

Нужно написать программу, которая в заданном порядке выводит звезды на форму и совершает их перемещение в том же порядке, одну за другой. Задачу нужно реализовать с помощью очереди, количество объектов задавать вручную и их скорость перемещения. Каждый объект должен быть случайного цвета.

Есть работающий вариант программы:

class Star {
public:
    int x, y, R, r;
    Star(int x, int y, int R, int r) {
        this->x = x;
        this->y = y;
        this->R = R;
        if (R < r) {
            this->r = R - 1;
        } else {
            this->r = r;
        }
    }
};
std::queue<Star> qu;
std::queue<Star> tm;
TColor myColor;
Star currentStar(0, 0, 0, 0);
int count;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    count = 31;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Star star(StrToInt(Edit1->Text),
        StrToInt(Edit2->Text),
        StrToInt(Edit3->Text),
        StrToInt(Edit4->Text));
    qu.push(star);
    count = 0;
}
//---------------------------------------------------------------------------
void DrawStar(Star star) {
    Form1->Canvas->Pen->Width = 3;
    Form1->Canvas->Pen->Color = myColor;
    Form1->Canvas->MoveTo(star.x, star.y - star.R);
    Form1->Canvas->LineTo(star.x + star.r*1.414, star.y - star.r*1.414);
    Form1->Canvas->LineTo(star.x + star.R, star.y);
    Form1->Canvas->LineTo(star.x + star.r*1.414, star.y + star.r*1.414);
    Form1->Canvas->LineTo(star.x, star.y + star.R);
    Form1->Canvas->LineTo(star.x - star.r*1.414, star.y + star.r*1.414);
    Form1->Canvas->LineTo(star.x - star.R, star.y);
    Form1->Canvas->LineTo(star.x - star.r*1.414, star.y - star.r*1.414);
    Form1->Canvas->LineTo(star.x, star.y - star.R);
}
bool MyUpdate() {
    if (count < 30) {
        currentStar.x++;
        currentStar.y++;
        count++;
    } else {
        if (qu.size() > 0) {
            currentStar = qu.front();
            qu.pop();
            tm.push(currentStar);
            myColor = RGB(rand() % 255, rand() % 255, rand() % 255);
            count = 0;
        } else {
            if (tm.size() <= 0) {
                return false;
            }
            qu = tm;
            for (int i = 0; i < tm.size(); i++) {
                tm.pop();
            }
        }
        return false;
    }
    return true;
}
void __fastcall TForm1::FormPaint(TObject *Sender)
{
    if (MyUpdate()) {
        DrawStar(currentStar);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Form1->Repaint();
}
//---------------------------------------------------------------------------

Делалось все в RAD Studio, все работает.

Как сделать реализацию этой задачи проще? Мне говорили что есть метод попроще.

READ ALSO
Статические переменные и методы класса

Статические переменные и методы класса

Как в современном (c++11 и более позднем) объявлять статические переменные в классе и можно ли вообще это делать?

217
Логика в майнере nheqminer

Логика в майнере nheqminer

Есть задание, написать свой майнер, за основу взяли https://githubcom/nicehash/nheqminer, для тестов выбрал nanopool, использую библиотеку "boost"

228
Ошибка &ldquo;Файл не найден&rdquo; Qt Creator

Ошибка “Файл не найден” Qt Creator

Написал несложную программу на с++ в Qt CreatorПрограмма работала

198
Помогите разобраться с регулярков в JS

Помогите разобраться с регулярков в JS

В общем у меня есть регулярк она должна очистить все и выдать числа

200