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