Изменения от Главреда ГитЖС | Changes of GitJS Glavred
This commit is contained in:
4
0000
4
0000
@@ -1,6 +1,8 @@
|
|||||||
Механика Маджонга
|
Механика Маджонга
|
||||||
0.1.0
|
0.2.0
|
||||||
https://git.opengamestudio.org/MAOH/MEXMA
|
https://git.opengamestudio.org/MAOH/MEXMA
|
||||||
|
|
||||||
|
x /⨐.js
|
||||||
x /🎬.js
|
x /🎬.js
|
||||||
/🎬.череда
|
/🎬.череда
|
||||||
|
x /📖.js
|
||||||
65
⨐.js
Normal file
65
⨐.js
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
фишкуМаджонгаМожноВыбрать = (индексы, индекс) =>
|
||||||
|
{
|
||||||
|
var позиция = позицияИндексаФишкиМаджонга(индекс);
|
||||||
|
// Проверяем заблокированность фишки одновременно с обеих сторон.
|
||||||
|
var слева = уФишкиМаджонгаЕстьСоседи(индексы, позиция, 0, -2);
|
||||||
|
var справа = уФишкиМаджонгаЕстьСоседи(индексы, позиция, 0, 2);
|
||||||
|
if (слева && справа)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверяем заблокированность сверху.
|
||||||
|
for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца)
|
||||||
|
{
|
||||||
|
if (уФишкиМаджонгаЕстьСоседи(индексы, позиция, 1, смещениеСтолбца))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
уФишкиМаджонгаЕстьСоседи = (индексы, позиция, смещениеСлоя, смещениеСтолбца) =>
|
||||||
|
{
|
||||||
|
for (var смещениеРяда = -1; смещениеРяда < 2; ++смещениеРяда)
|
||||||
|
{
|
||||||
|
var позицияСоседа = [
|
||||||
|
позиция[0] + смещениеСлоя,
|
||||||
|
позиция[1] + смещениеРяда,
|
||||||
|
позиция[2] + смещениеСтолбца,
|
||||||
|
];
|
||||||
|
var индексСоседа = индексПозицииФишкиМаджонга(позицияСоседа);
|
||||||
|
if (индексСоседа in индексы)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
позицияИндексаФишкиМаджонга = (индекс) =>
|
||||||
|
{
|
||||||
|
const x = Math.round(индекс / 1000000);
|
||||||
|
const y = Math.round((индекс - x * 1000000) / 1000);
|
||||||
|
const z = индекс - x * 1000000 - y * 1000;
|
||||||
|
return [x, y, z];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
индексПозицииФишкиМаджонга = (позиция) =>
|
||||||
|
{
|
||||||
|
return позиция[0] * 1000000 + позиция[1] * 1000 + позиция[2];
|
||||||
|
};
|
||||||
40
🎬.js
40
🎬.js
@@ -1,4 +1,13 @@
|
|||||||
const ЗАДЕРЖКА = 100;
|
ОчиститьИндексыФишекМаджонгаОтУбранных = мир =>
|
||||||
|
{
|
||||||
|
for (var номер in мир.убранныеФишкиМаджонга)
|
||||||
|
{
|
||||||
|
var н = мир.убранныеФишкиМаджонга[номер];
|
||||||
|
var позиция = мир.фишкиМаджонга[н]["📍"];
|
||||||
|
var индекс = индексПозицииФишкиМаджонга(позиция);
|
||||||
|
delete мир.индексыФишекМаджонга[индекс];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// // // //
|
// // // //
|
||||||
@@ -51,32 +60,3 @@ const ЗАДЕРЖКА = 100;
|
|||||||
мир.уведомить("выбрали пару фишек маджонга разных групп");
|
мир.уведомить("выбрали пару фишек маджонга разных групп");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// // // //
|
|
||||||
|
|
||||||
|
|
||||||
ВыбратьФишкуМаджонга = мир =>
|
|
||||||
{
|
|
||||||
var номер = мир.фишкаМаджонгаДляВыбора;
|
|
||||||
// Отсекаем выбор одной и той же фишки.
|
|
||||||
if (
|
|
||||||
мир.выбраннаяФишкаМаджонга &&
|
|
||||||
мир.выбраннаяФишкаМаджонга == номер
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
мир.выбраннаяФишкаМаджонга = номер;
|
|
||||||
мир.выбранныеФишкиМаджонга.push(номер);
|
|
||||||
мир.уведомить("изменили выбранные фишки маджонга");
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// // // //
|
|
||||||
|
|
||||||
|
|
||||||
ПодготовитьМеханикуМаджонга = мир =>
|
|
||||||
{
|
|
||||||
мир.выбранныеФишкиМаджонга = [];
|
|
||||||
мир.задержкаУбиранияФишекМаджонга = ЗАДЕРЖКА;
|
|
||||||
};
|
|
||||||
2
🎬.череда
2
🎬.череда
@@ -4,3 +4,5 @@
|
|||||||
исключить из выбранных фишек маджонга первую
|
исключить из выбранных фишек маджонга первую
|
||||||
выбрали пару фишек маджонга одной группы
|
выбрали пару фишек маджонга одной группы
|
||||||
убрать выбранную пару фишек маджонга с задержкой
|
убрать выбранную пару фишек маджонга с задержкой
|
||||||
|
убрали фишки маджонга
|
||||||
|
очистить индексы фишек маджонга от убранных
|
||||||
53
📖.js
Normal file
53
📖.js
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
const ЗАДЕРЖКА = 100;
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
СоздатьИндексыФишекМаджонга = мир =>
|
||||||
|
{
|
||||||
|
мир.индексыФишекМаджонга = {};
|
||||||
|
for (var н in мир.фишкиМаджонга)
|
||||||
|
{
|
||||||
|
var позиция = мир.фишкиМаджонга[н]["📍"];
|
||||||
|
var индекс = индексПозицииФишкиМаджонга(позиция);
|
||||||
|
мир.индексыФишекМаджонга[индекс] = н;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ВыбратьФишкуМаджонга = мир =>
|
||||||
|
{
|
||||||
|
var номер = мир.фишкаМаджонгаДляВыбора;
|
||||||
|
// Отсекаем выбор одной и той же фишки.
|
||||||
|
if (
|
||||||
|
мир.выбраннаяФишкаМаджонга &&
|
||||||
|
мир.выбраннаяФишкаМаджонга == номер
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Проверяем доступность с точки зрения правил Маджонга.
|
||||||
|
var позиция = мир.фишкиМаджонга[номер]["📍"];
|
||||||
|
var индекс = индексПозицииФишкиМаджонга(позиция);
|
||||||
|
if (!фишкуМаджонгаМожноВыбрать(мир.индексыФишекМаджонга, индекс))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
мир.выбраннаяФишкаМаджонга = номер;
|
||||||
|
мир.выбранныеФишкиМаджонга.push(номер);
|
||||||
|
мир.уведомить("изменили выбранные фишки маджонга");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ПодготовитьМеханикуМаджонга = мир =>
|
||||||
|
{
|
||||||
|
мир.выбранныеФишкиМаджонга = [];
|
||||||
|
мир.задержкаУбиранияФишекМаджонга = ЗАДЕРЖКА;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user