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