Добавить Раскладку от 2109-08-16
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Временные файлы VIM.
|
||||||
|
*.swp
|
||||||
117
Раскладка_2019-08-16.js
Normal file
117
Раскладка_2019-08-16.js
Normal file
@@ -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 о;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user