|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
-
-
- фишкуМожноВыбрать = (индексы, индекс) =>
- {
- 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];
- };
-
-
- // // // //
-
-
- номерФишки = (фишки, id) =>
- {
- for (var номер in фишки)
- {
- var фишка = фишки[номер];
- if (фишка.id == id)
- {
- return номер;
- }
- }
-
- return null;
- };
|