Files
mahjong/классы/Раскладка/2019-08-16.js

118 lines
4.0 KiB
JavaScript
Raw 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.

function Раскладка()
{
this.версия = "";
this.ширина = 0;
this.высота = 0;
this.глубина = 0;
this.позиции = [];
// Для внутреннего пользования.
this.поля = [];
};
Раскладка.prototype.разобратьСлужебнуюИнформацию = function(содержимое)
{
const ключи = {
"версия": "kmahjongg-layout-v",
"комментарий": "#",
"ширина": "w",
"высота": "h",
"глубина": "d"
};
// ВНИМАНИЕ Версия 1.0 предполагает заданные заранее ширину и высоту.
this.версия = "";
this.глубина = 0;
this.ширина = 32;
this.высота = 16;
this.поля = [];
var поле = [];
var строки = содержимое.split("\n");
for (var номер in строки)
{
var строка = строки[номер].trim();
// Пропуск.
if (строка.startsWith(ключи.комментарий))
{
continue;
}
// Служебная информация.
if (строка.startsWith(ключи.версия))
{
this.версия = строка.split(ключи.версия)[1];
}
else if (строка.startsWith(ключи.ширина))
{
this.ширина = строка.split(ключи.ширина)[1];
}
else if (строка.startsWith(ключи.высота))
{
this.высота = строка.split(ключи.высота)[1];
}
else if (строка.startsWith(ключи.глубина))
{
this.глубина = строка.split(ключи.глубина)[1];
}
// Поле.
else
{
поле.push(строка);
if (поле.length >= this.высота)
{
this.поля.push(поле.slice());
поле = [];
}
}
}
if (this.глубина == 0)
{
this.глубина = this.поля.length;
}
}
Раскладка.prototype.разобратьПозиции = function()
{
this.позиции = [];
for (var номер in this.поля)
{
var поле = this.поля[номер];
for (var строка = 0; строка < this.высота - 1; ++строка)
{
for (var столбец = 0; столбец < this.ширина - 1; ++столбец)
{
if (
поле[строка][столбец] == "1" &&
поле[строка][столбец + 1] == "2" &&
поле[строка + 1][столбец] == "4" &&
поле[строка + 1][столбец + 1] == "3"
) {
this.позиции.push([номер, строка, столбец]);
}
}
}
}
}
Раскладка.prototype.разобрать = function(содержимое)
{
this.разобратьСлужебнуюИнформацию(содержимое);
this.разобратьПозиции();
}
Раскладка.prototype.отладка = function()
{
var о = "";
о += "Отладочная информация о раскладке:\n";
о += " версия: '" + this.версия + "'\n";
о += " ширина: '" + this.ширина + "'\n";
о += " высота: '" + this.высота + "'\n";
о += " глубина: '" + this.глубина + "'\n";
о += " позиции:\n";
for (var номер in this.позиции)
{
var п = this.позиции[номер];
о += " п(" + номер + "): '" + п[0] + ", " + п[1] + ", " + п[2] + "'\n";
}
return о;
}