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

118 líneas
4.0 KiB
JavaScript
Original Blame Histórico

Este archivo contiene caracteres Unicode ambiguos

Este archivo contiene caracteres Unicode que pueden confundirse con otros caracteres. Si crees que esto es intencional, puedes ignorar esta advertencia. Usa el botón de Escape para revelarlos.

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 о;
}