|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- фишкуМаджонгаМожноВыбрать = (индексы, индекс) =>
- {
- 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];
- };
|