Files
mahjong-raskladka-layout/раскладка-layout-kmahjongg.js

106 lines
4.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

разобратьРаскладкуKMahjongg = function(содержимое)
{
this.__преобразоватьСодержимоеВСтроки = () =>
{
var строки = содержимое.split(/\n/);
this.строки = [];
for (var номер in строки)
{
var строка = строки[номер].trim();
// Пропускаем комментарии и пустые строки.
if (строка.startsWith("#") || !строка.length)
{
continue;
}
this.строки.push(строка);
}
};
this.__разобратьПараметры = () =>
{
var параметры = {
"ширина": 32,
"высота": 16,
"глубина": 0,
"версия": "1.0",
};
var префиксы = {
"версия": "kmahjongg-layout-v",
"глубина": "d",
"ширина": "w",
"высота": "h",
};
var удалитьЭлементов = 0;
var строки = this.строки;
for (var номер in строки)
{
var строка = строки[номер];
// Версия.
if (строка.startsWith(префиксы.версия))
{
параметры.версия = строка.substring(префиксы.версия.length);
}
// Глубина.
else if (строка.startsWith(префиксы.глубина))
{
параметры.глубина = строка.substring(префиксы.глубина.length);
}
// Ширина.
else if (строка.startsWith(префиксы.ширина))
{
параметры.ширина = строка.substring(префиксы.ширина.length);
}
// Высота.
else if (строка.startsWith(префиксы.высота))
{
параметры.высота = строка.substring(префиксы.высота.length);
}
else
{
удалитьЭлементов = номер;
break;
}
}
this.строки.splice(0, удалитьЭлементов);
if (параметры.глубина == 0)
{
параметры.глубина = this.строки.length / параметры.высота;
}
this.параметры = параметры;
};
this.__разобратьПозиции = () =>
{
const параметры = this.параметры;
const строки = this.строки;
var позиции = [];
for (var номерСлоя = 0; номерСлоя < параметры.глубина; ++номерСлоя)
{
for (var ряд = 0; ряд < параметры.высота - 1; ++ряд)
{
for (var столбец = 0; столбец < параметры.ширина - 1; ++столбец)
{
const рядСлоя = ряд + (номерСлоя * параметры.высота);
if (
(строки[рядСлоя][столбец] == '1') &&
(строки[рядСлоя][столбец + 1] == '2') &&
(строки[рядСлоя + 1][столбец] == '4') &&
(строки[рядСлоя + 1][столбец + 1] == '3')
) {
позиции.push([номерСлоя, ряд, столбец]);
}
}
}
}
this.позиции = позиции;
};
// Исполняем.
this.__преобразоватьСодержимоеВСтроки();
this.__разобратьПараметры();
this.__разобратьПозиции();
return this.позиции;
};