разобратьРаскладку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.позиции; };