From 6ed9c48a9436124ab44f73b6e2989ff529e5e8d6 Mon Sep 17 00:00:00 2001 From: dm1sh Date: Fri, 10 Jun 2022 05:44:42 +0300 Subject: [PATCH] Minor fixes --- Controller.cpp | 46 ++++++++++++++++++++++++---------------------- Drawer.cpp | 6 +++--- Drawer.h | 2 -- MainFrame.cpp | 4 ++-- TextDlg.cpp | 6 +++--- XmlLayout.cpp | 2 +- utils.h | 2 +- 7 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Controller.cpp b/Controller.cpp index 6ae12cd..8d3bf1f 100644 --- a/Controller.cpp +++ b/Controller.cpp @@ -2,7 +2,7 @@ #include -static const std::array defaultCardsCounter{ +const std::array defaultCardsCounter{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1}; @@ -48,7 +48,7 @@ void Controller::fillSolveableTable() { auto next_ptr = positions.begin(); // инициализируем указатель на позицию, куда будет вставляться следующий камень while (!positions.empty()) { - int id = genRandId(); + auto id = genRandId(); emplace_table(id, *next_ptr, positions); // вставляем id в next_ptr not_end--; // уменьшаем счётчик оставшихся для вставки камней @@ -60,10 +60,10 @@ void Controller::fillSolveableTable() { else id = getFreeSingularId(id); - emplace_table(id, *next_ptr, positions); - not_end--; + emplace_table(id, *next_ptr, positions); // вставляем id в next_ptr + not_end--; // уменьшаем счётчик оставшихся для вставки камней - next_rand(positions, next_ptr, true, not_end); + next_rand(positions, next_ptr, true, not_end); // Находим случайную новую позицию } } @@ -124,26 +124,28 @@ void Controller::next_rand(PosSet& positions, const auto rand_ptr = ptr; // сохраняем предыдущее положение итератора - while (!canOverlap && ptr != positions.end() && wouldOverlap(prev, *ptr)) // Пока не найдём тот, что не будет закрывать только что вставленную позицию, если не canBeUp или дошли до конца набора - ptr++; // наращиваем итератор - - if (ptr == positions.end()) { // если ни одна из позиций начиная с rand_ptr не подошла (нельзя выбирать накрывающую предыдущий камень и все позиции накрывают) - ptr = positions.begin(); // начинаем с начала - - while (!canOverlap && ptr != rand_ptr && wouldOverlap(prev, *ptr)) // Пока не найдём тот, что не будет закрывать только что вставленную позицию, если не canBeUp и не дошли до rand_ptr + if (!canOverlap) { + while (ptr != positions.end() && wouldOverlap(prev, *ptr)) // Пока не найдём тот, что не будет закрывать только что вставленную позицию, если не canBeUp или дошли до конца набора ptr++; // наращиваем итератор - } - if (ptr == rand_ptr && !canOverlap && wouldOverlap(prev, *ptr)) { // если итератор совпадает с rand_ptr и при этом ptr перекрывает prev, - if (not_end == positions.size()) // если уже все позиции добавлены в набор - ptr = positions.begin(); // просто выбираем первую из них - else { // иначе - auto res = positions.insert(getRandLowest()); // пытаемся вставить вставляем случайную позицию в нижней плоскости + if (ptr == positions.end()) { // если ни одна из позиций начиная с rand_ptr не подошла (нельзя выбирать накрывающую предыдущий камень и все позиции накрывают) + ptr = positions.begin(); // начинаем с начала - while (!res.second) // пока не произошла вставка позиции в набор - res = positions.insert(getRandLowest()); // пытаемся вставить случайную позицию в нижней плоскости + while (ptr != rand_ptr && wouldOverlap(prev, *ptr)) // Пока не найдём тот, что не будет закрывать только что вставленную позицию, если не canBeUp и не дошли до rand_ptr + ptr++; // наращиваем итератор + } - ptr = res.first; // получаем итератор на только что вставленную позицию + if (ptr == rand_ptr && wouldOverlap(prev, *ptr)) { // если итератор совпадает с rand_ptr и при этом ptr перекрывает prev, + if (not_end == positions.size()) // если уже все позиции добавлены в набор + ptr = positions.begin(); // просто выбираем первую из них + else { // иначе + auto res = positions.insert(getRandLowest()); // пытаемся вставить вставляем случайную позицию в нижней плоскости + + while (!res.second) // пока не произошла вставка позиции в набор + res = positions.insert(getRandLowest()); // пытаемся вставить случайную позицию в нижней плоскости + + ptr = res.first; // получаем итератор на только что вставленную позицию + } } } } @@ -318,7 +320,7 @@ CardT Controller::getFreeSingularId(CardT prev) { * It also changes point to top right coordinate of card */ CardT* Controller::getCardByPosition(ThreePoint& point) { - int8_t topIndex = -1; // начинаем с -1, чтобы если не нашёлся ни один камень, получить невалидную позицию + int topIndex = -1; // начинаем с -1, чтобы если не нашёлся ни один камень, получить невалидную позицию CardT* res = nullptr; // указатель на элемент массива ThreePoint realPos(point); // сохраняем копию позиции, чтобы при смещении не ломать позицию, для которой ищем diff --git a/Drawer.cpp b/Drawer.cpp index 81c3c97..939aeea 100644 --- a/Drawer.cpp +++ b/Drawer.cpp @@ -3,7 +3,7 @@ #include #include -static const char* tileImageNames[TILE_IMAGES_N] = { +const char* tileImageNames[TILE_IMAGES_N] = { // clang-format off "Pin1", "Pin2", "Pin3", "Pin4", "Pin5", "Pin6", "Pin7", "Pin8", "Pin9", "Sou1", "Sou2", "Sou3", "Sou4", "Sou5", "Sou6", "Sou7", "Sou8", "Sou9", @@ -37,8 +37,8 @@ void Drawer::drawTable(wxDC& dc) const { } } -static const wxColor lGreen{0x07, 0x55, 0x2b}; -static const wxColor dGreen{0x01, 0x2d, 0x16}; +const wxColor lGreen{0x07, 0x55, 0x2b}; +const wxColor dGreen{0x01, 0x2d, 0x16}; void Drawer::composeBG() { bgBitmap = wxBitmap(resolution); // создаём битмап размером со всю панейль diff --git a/Drawer.h b/Drawer.h index 9df2856..d5755d1 100644 --- a/Drawer.h +++ b/Drawer.h @@ -30,8 +30,6 @@ public: wxSize composeMinSize(const Dimensions& gridSize) const; - wxSize tableSize; - wxSize tilePixelSize; // кратно 3x4, по умолчанию 600x800 wxSize resolution; wxRect boardPixelRect; diff --git a/MainFrame.cpp b/MainFrame.cpp index 7c9d327..607285f 100644 --- a/MainFrame.cpp +++ b/MainFrame.cpp @@ -47,13 +47,13 @@ MainFrame::MainFrame() void MainFrame::initMenu() { wxMenu* menuGame = new wxMenu; // Создаём подменю menuGame->Append(IDM_New_Game, _("Начать сначала\tCTRL+N")); // Создаем пункт меню с id обработчика IDM_New_Game, далее аналогично - menuGame->Append(IDM_Open, _("Открыть карту")); + menuGame->Append(IDM_Open, _("Открыть карту\tCTRL+O")); menuGame->AppendCheckItem(IDM_Solveable, _("Генерировать решаемую карту")); menuGame->AppendSeparator(); // Добавляем горизонтальный разделитель в меню menuGame->Append(IDM_Undo, _("Отменить ход")); menuGame->Append(IDM_Reshuffle, _("Перемешать поле")); menuGame->AppendSeparator(); - menuGame->Append(IDM_Exit, _("Выход")); + menuGame->Append(IDM_Exit, _("Выход\tCTRL+Q")); wxMenu* menuHelp = new wxMenu; menuHelp->Append(IDM_Help, _("Инструкция")); diff --git a/TextDlg.cpp b/TextDlg.cpp index 675dfd7..8ec6a76 100644 --- a/TextDlg.cpp +++ b/TextDlg.cpp @@ -20,13 +20,13 @@ TextDlg::TextDlg(wxWindow* parent, wxWindowID id, const wxString& title, const w wxDefaultSize, wxSP_WRAP); const wxClientDC dc(text); // создаём dc, используя для него настройки статического текста - const wxSize lineSize = dc.GetTextExtent(wxString('W', 40U)); // получаем из dc размеры строчки из 40 символов 'W' (так как текст удобнее всего читать, если в нём около 40-60 символов в строке) + const wxSize& lineSize = dc.GetTextExtent(wxString('W', 40U)); // получаем из dc размеры строчки из 40 символов 'W' (так как текст удобнее всего читать, если в нём около 40-60 символов в строке) scrollableWnd->SetScrollbars(lineSize.x, lineSize.y, 0, 0); // устанавливаем скорость скролла (количество пикселей, прокручиваемых при одинарном прокручивании колеса мыши, или нажатие кнопки) text->Wrap(lineSize.x); // Делаем перенос строк для того, чтобы вместить текст в ширину строки - auto textSize = text->GetClientSize(); // получаем размер статического текста + const wxSize& textSize = text->GetClientSize(); // получаем размер статического текста scrollableWnd->SetVirtualSize(textSize.x, textSize.y); // устанавливаем виртуальный размер окна прокрутки равным размерам статического текста @@ -34,4 +34,4 @@ TextDlg::TextDlg(wxWindow* parent, wxWindowID id, const wxString& title, const w textSize.x + 10 + wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y), // по ширине: ширина текста mmin(textSize.y, lineSize.y * 30) + 10); // по высоте: минимум из реальной высоты текста, или 30 строк // + отступы по 5 пикселей с обеих сторон -} \ No newline at end of file +} diff --git a/XmlLayout.cpp b/XmlLayout.cpp index f90beaf..0dbc5f1 100644 --- a/XmlLayout.cpp +++ b/XmlLayout.cpp @@ -16,7 +16,7 @@ bool XmlLayout::openFile(const wxString& openPath) { } Dimensions XmlLayout::getDimensions() { - auto root = layoutDoc.GetRoot(); // сохраняем в ссылке указатель на корневой элемент XML-документа + auto root = layoutDoc.GetRoot(); // сохраняем указатель на корневой элемент XML-документа lx = wxAtoi(root->GetAttribute("lx")); // считываем минимальный x ly = wxAtoi(root->GetAttribute("ly")); // считываем минимальный y diff --git a/utils.h b/utils.h index 07e6799..60aa8e0 100644 --- a/utils.h +++ b/utils.h @@ -16,7 +16,7 @@ wxString PRemaining(uint8_t remaining); #define mmin(a, b) (a + b - abs(a - b)) / 2 // среднее арифметическое минус половина разницы #define mmax(a, b) (a + b + abs(a - b)) / 2 // среднее арифметическое плюс половина разницы -using CardT = int16_t; +using CardT = int8_t; struct Dimensions : wxSize { // используется там, где необходимо задать размеры в трёх координатах Dimensions(int _z, int _x, int _y) : z(_z), wxSize(_x, _y){};