commit 42d6571bcd7135ab609ba9d2c5912fc1fab8b348 Author: Michael Kapelko Date: Thu Sep 5 11:47:49 2019 +0300 Добавить Раскладку от 2109-08-16 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3587989 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Временные файлы VIM. +*.swp diff --git a/Раскладка_2019-08-16.js b/Раскладка_2019-08-16.js new file mode 100644 index 0000000..b8a1c74 --- /dev/null +++ b/Раскладка_2019-08-16.js @@ -0,0 +1,117 @@ +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 о; +}