@@ -1,6 +1,8 @@ | |||
Механика Маджонга | |||
0.1.0 | |||
0.2.0 | |||
https://git.opengamestudio.org/MAOH/MEXMA | |||
x /⨐.js | |||
x /🎬.js | |||
/🎬.череда | |||
/🎬.череда | |||
x /📖.js |
@@ -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]; | |||
}; |
@@ -1,4 +1,13 @@ | |||
const ЗАДЕРЖКА = 100; | |||
ОчиститьИндексыФишекМаджонгаОтУбранных = мир => | |||
{ | |||
for (var номер in мир.убранныеФишкиМаджонга) | |||
{ | |||
var н = мир.убранныеФишкиМаджонга[номер]; | |||
var позиция = мир.фишкиМаджонга[н]["📍"]; | |||
var индекс = индексПозицииФишкиМаджонга(позиция); | |||
delete мир.индексыФишекМаджонга[индекс]; | |||
} | |||
}; | |||
// // // // | |||
@@ -50,33 +59,4 @@ const ЗАДЕРЖКА = 100; | |||
{ | |||
мир.уведомить("выбрали пару фишек маджонга разных групп"); | |||
} | |||
}; | |||
// // // // | |||
ВыбратьФишкуМаджонга = мир => | |||
{ | |||
var номер = мир.фишкаМаджонгаДляВыбора; | |||
// Отсекаем выбор одной и той же фишки. | |||
if ( | |||
мир.выбраннаяФишкаМаджонга && | |||
мир.выбраннаяФишкаМаджонга == номер | |||
) { | |||
return; | |||
} | |||
мир.выбраннаяФишкаМаджонга = номер; | |||
мир.выбранныеФишкиМаджонга.push(номер); | |||
мир.уведомить("изменили выбранные фишки маджонга"); | |||
}; | |||
// // // // | |||
ПодготовитьМеханикуМаджонга = мир => | |||
{ | |||
мир.выбранныеФишкиМаджонга = []; | |||
мир.задержкаУбиранияФишекМаджонга = ЗАДЕРЖКА; | |||
}; |
@@ -3,4 +3,6 @@ | |||
выбрали пару фишек маджонга разных групп | |||
исключить из выбранных фишек маджонга первую | |||
выбрали пару фишек маджонга одной группы | |||
убрать выбранную пару фишек маджонга с задержкой | |||
убрать выбранную пару фишек маджонга с задержкой | |||
убрали фишки маджонга | |||
очистить индексы фишек маджонга от убранных |
@@ -0,0 +1,53 @@ | |||
const ЗАДЕРЖКА = 100; | |||
// // // // | |||
СоздатьИндексыФишекМаджонга = мир => | |||
{ | |||
мир.индексыФишекМаджонга = {}; | |||
for (var н in мир.фишкиМаджонга) | |||
{ | |||
var позиция = мир.фишкиМаджонга[н]["📍"]; | |||
var индекс = индексПозицииФишкиМаджонга(позиция); | |||
мир.индексыФишекМаджонга[индекс] = н; | |||
}; | |||
}; | |||
// // // // | |||
ВыбратьФишкуМаджонга = мир => | |||
{ | |||
var номер = мир.фишкаМаджонгаДляВыбора; | |||
// Отсекаем выбор одной и той же фишки. | |||
if ( | |||
мир.выбраннаяФишкаМаджонга && | |||
мир.выбраннаяФишкаМаджонга == номер | |||
) { | |||
return; | |||
} | |||
// Проверяем доступность с точки зрения правил Маджонга. | |||
var позиция = мир.фишкиМаджонга[номер]["📍"]; | |||
var индекс = индексПозицииФишкиМаджонга(позиция); | |||
if (!фишкуМаджонгаМожноВыбрать(мир.индексыФишекМаджонга, индекс)) | |||
{ | |||
return; | |||
} | |||
мир.выбраннаяФишкаМаджонга = номер; | |||
мир.выбранныеФишкиМаджонга.push(номер); | |||
мир.уведомить("изменили выбранные фишки маджонга"); | |||
}; | |||
// // // // | |||
ПодготовитьМеханикуМаджонга = мир => | |||
{ | |||
мир.выбранныеФишкиМаджонга = []; | |||
мир.задержкаУбиранияФишекМаджонга = ЗАДЕРЖКА; | |||
}; |