Minor fixes

This commit is contained in:
Dmitriy Shishkov 2022-06-10 05:44:42 +03:00
parent a367b26f87
commit 6ed9c48a94
No known key found for this signature in database
GPG Key ID: 26720CB2A9608C97
7 changed files with 34 additions and 34 deletions

View File

@ -2,7 +2,7 @@
#include <exception> #include <exception>
static const std::array<uint8_t, 42> defaultCardsCounter{ const std::array<uint8_t, 42> 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, 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}; 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(); // инициализируем указатель на позицию, куда будет вставляться следующий камень auto next_ptr = positions.begin(); // инициализируем указатель на позицию, куда будет вставляться следующий камень
while (!positions.empty()) { while (!positions.empty()) {
int id = genRandId(); auto id = genRandId();
emplace_table(id, *next_ptr, positions); // вставляем id в next_ptr emplace_table(id, *next_ptr, positions); // вставляем id в next_ptr
not_end--; // уменьшаем счётчик оставшихся для вставки камней not_end--; // уменьшаем счётчик оставшихся для вставки камней
@ -60,10 +60,10 @@ void Controller::fillSolveableTable() {
else else
id = getFreeSingularId(id); id = getFreeSingularId(id);
emplace_table(id, *next_ptr, positions); emplace_table(id, *next_ptr, positions); // вставляем id в next_ptr
not_end--; 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; // сохраняем предыдущее положение итератора const auto rand_ptr = ptr; // сохраняем предыдущее положение итератора
while (!canOverlap && ptr != positions.end() && wouldOverlap(prev, *ptr)) // Пока не найдём тот, что не будет закрывать только что вставленную позицию, если не canBeUp или дошли до конца набора if (!canOverlap) {
ptr++; // наращиваем итератор while (ptr != positions.end() && wouldOverlap(prev, *ptr)) // Пока не найдём тот, что не будет закрывать только что вставленную позицию, если не canBeUp или дошли до конца набора
if (ptr == positions.end()) { // если ни одна из позиций начиная с rand_ptr не подошла (нельзя выбирать накрывающую предыдущий камень и все позиции накрывают)
ptr = positions.begin(); // начинаем с начала
while (!canOverlap && ptr != rand_ptr && wouldOverlap(prev, *ptr)) // Пока не найдём тот, что не будет закрывать только что вставленную позицию, если не canBeUp и не дошли до rand_ptr
ptr++; // наращиваем итератор ptr++; // наращиваем итератор
}
if (ptr == rand_ptr && !canOverlap && wouldOverlap(prev, *ptr)) { // если итератор совпадает с rand_ptr и при этом ptr перекрывает prev, if (ptr == positions.end()) { // если ни одна из позиций начиная с rand_ptr не подошла (нельзя выбирать накрывающую предыдущий камень и все позиции накрывают)
if (not_end == positions.size()) // если уже все позиции добавлены в набор ptr = positions.begin(); // начинаем с начала
ptr = positions.begin(); // просто выбираем первую из них
else { // иначе
auto res = positions.insert(getRandLowest()); // пытаемся вставить вставляем случайную позицию в нижней плоскости
while (!res.second) // пока не произошла вставка позиции в набор while (ptr != rand_ptr && wouldOverlap(prev, *ptr)) // Пока не найдём тот, что не будет закрывать только что вставленную позицию, если не canBeUp и не дошли до rand_ptr
res = positions.insert(getRandLowest()); // пытаемся вставить случайную позицию в нижней плоскости 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 * It also changes point to top right coordinate of card
*/ */
CardT* Controller::getCardByPosition(ThreePoint& point) { CardT* Controller::getCardByPosition(ThreePoint& point) {
int8_t topIndex = -1; // начинаем с -1, чтобы если не нашёлся ни один камень, получить невалидную позицию int topIndex = -1; // начинаем с -1, чтобы если не нашёлся ни один камень, получить невалидную позицию
CardT* res = nullptr; // указатель на элемент массива CardT* res = nullptr; // указатель на элемент массива
ThreePoint realPos(point); // сохраняем копию позиции, чтобы при смещении не ломать позицию, для которой ищем ThreePoint realPos(point); // сохраняем копию позиции, чтобы при смещении не ломать позицию, для которой ищем

View File

@ -3,7 +3,7 @@
#include <wx/filename.h> #include <wx/filename.h>
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
static const char* tileImageNames[TILE_IMAGES_N] = { const char* tileImageNames[TILE_IMAGES_N] = {
// clang-format off // clang-format off
"Pin1", "Pin2", "Pin3", "Pin4", "Pin5", "Pin6", "Pin7", "Pin8", "Pin9", "Pin1", "Pin2", "Pin3", "Pin4", "Pin5", "Pin6", "Pin7", "Pin8", "Pin9",
"Sou1", "Sou2", "Sou3", "Sou4", "Sou5", "Sou6", "Sou7", "Sou8", "Sou9", "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}; const wxColor lGreen{0x07, 0x55, 0x2b};
static const wxColor dGreen{0x01, 0x2d, 0x16}; const wxColor dGreen{0x01, 0x2d, 0x16};
void Drawer::composeBG() { void Drawer::composeBG() {
bgBitmap = wxBitmap(resolution); // создаём битмап размером со всю панейль bgBitmap = wxBitmap(resolution); // создаём битмап размером со всю панейль

View File

@ -30,8 +30,6 @@ public:
wxSize composeMinSize(const Dimensions& gridSize) const; wxSize composeMinSize(const Dimensions& gridSize) const;
wxSize tableSize;
wxSize tilePixelSize; // кратно 3x4, по умолчанию 600x800 wxSize tilePixelSize; // кратно 3x4, по умолчанию 600x800
wxSize resolution; wxSize resolution;
wxRect boardPixelRect; wxRect boardPixelRect;

View File

@ -47,13 +47,13 @@ MainFrame::MainFrame()
void MainFrame::initMenu() { void MainFrame::initMenu() {
wxMenu* menuGame = new wxMenu; // Создаём подменю wxMenu* menuGame = new wxMenu; // Создаём подменю
menuGame->Append(IDM_New_Game, _("Начать сначала\tCTRL+N")); // Создаем пункт меню с id обработчика IDM_New_Game, далее аналогично 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->AppendCheckItem(IDM_Solveable, _("Генерировать решаемую карту"));
menuGame->AppendSeparator(); // Добавляем горизонтальный разделитель в меню menuGame->AppendSeparator(); // Добавляем горизонтальный разделитель в меню
menuGame->Append(IDM_Undo, _("Отменить ход")); menuGame->Append(IDM_Undo, _("Отменить ход"));
menuGame->Append(IDM_Reshuffle, _("Перемешать поле")); menuGame->Append(IDM_Reshuffle, _("Перемешать поле"));
menuGame->AppendSeparator(); menuGame->AppendSeparator();
menuGame->Append(IDM_Exit, _("Выход")); menuGame->Append(IDM_Exit, _("Выход\tCTRL+Q"));
wxMenu* menuHelp = new wxMenu; wxMenu* menuHelp = new wxMenu;
menuHelp->Append(IDM_Help, _("Инструкция")); menuHelp->Append(IDM_Help, _("Инструкция"));

View File

@ -20,13 +20,13 @@ TextDlg::TextDlg(wxWindow* parent, wxWindowID id, const wxString& title, const w
wxDefaultSize, wxSP_WRAP); wxDefaultSize, wxSP_WRAP);
const wxClientDC dc(text); // создаём dc, используя для него настройки статического текста 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); // устанавливаем скорость скролла (количество пикселей, прокручиваемых при одинарном прокручивании колеса мыши, или нажатие кнопки) scrollableWnd->SetScrollbars(lineSize.x, lineSize.y, 0, 0); // устанавливаем скорость скролла (количество пикселей, прокручиваемых при одинарном прокручивании колеса мыши, или нажатие кнопки)
text->Wrap(lineSize.x); // Делаем перенос строк для того, чтобы вместить текст в ширину строки text->Wrap(lineSize.x); // Делаем перенос строк для того, чтобы вместить текст в ширину строки
auto textSize = text->GetClientSize(); // получаем размер статического текста const wxSize& textSize = text->GetClientSize(); // получаем размер статического текста
scrollableWnd->SetVirtualSize(textSize.x, textSize.y); // устанавливаем виртуальный размер окна прокрутки равным размерам статического текста scrollableWnd->SetVirtualSize(textSize.x, textSize.y); // устанавливаем виртуальный размер окна прокрутки равным размерам статического текста

View File

@ -16,7 +16,7 @@ bool XmlLayout::openFile(const wxString& openPath) {
} }
Dimensions XmlLayout::getDimensions() { Dimensions XmlLayout::getDimensions() {
auto root = layoutDoc.GetRoot(); // сохраняем в ссылке указатель на корневой элемент XML-документа auto root = layoutDoc.GetRoot(); // сохраняем указатель на корневой элемент XML-документа
lx = wxAtoi(root->GetAttribute("lx")); // считываем минимальный x lx = wxAtoi(root->GetAttribute("lx")); // считываем минимальный x
ly = wxAtoi(root->GetAttribute("ly")); // считываем минимальный y ly = wxAtoi(root->GetAttribute("ly")); // считываем минимальный y

View File

@ -16,7 +16,7 @@ wxString PRemaining(uint8_t remaining);
#define mmin(a, b) (a + b - abs(a - b)) / 2 // среднее арифметическое минус половина разницы #define mmin(a, b) (a + b - abs(a - b)) / 2 // среднее арифметическое минус половина разницы
#define mmax(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 { // используется там, где необходимо задать размеры в трёх координатах struct Dimensions : wxSize { // используется там, где необходимо задать размеры в трёх координатах
Dimensions(int _z, int _x, int _y) : z(_z), wxSize(_x, _y){}; Dimensions(int _z, int _x, int _y) : z(_z), wxSize(_x, _y){};