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