Compare commits
11 Commits
804aa6dc8d
...
M-0.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 8ea0353eea | |||
| 65b72ef076 | |||
|
|
3a1ca7d11e | ||
|
|
f910244315 | ||
|
|
512806be72 | ||
|
|
1d2caf9d74 | ||
|
|
164ddbb896 | ||
|
|
bddc7075a0 | ||
|
|
c29a00c327 | ||
|
|
e10d402ed3 | ||
|
|
bed828e0b8 |
@@ -1,5 +1,5 @@
|
|||||||
const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources";
|
const УКАЗАТЕЛЬ_МОДУЛЯ_РЕСУРСОВ = "https://git.opengamestudio.org/mahjong/mahjong-res/raw/commit/5430b4d62bcc3d60f1e570485ee5cd562b70582d/0000";
|
||||||
const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладки Маджонга | Mahjong debug layouts";
|
const УКАЗАТЕЛЬ_ОТЛ_РАСКЛАДКИ = "https://git.opengamestudio.org/mahjong/mahjong-otl-raskladki-dbg-layouts/raw/commit/2951feab28448266d3446974e781d320ebbed8df/0000";
|
||||||
|
|
||||||
// // // //
|
// // // //
|
||||||
|
|
||||||
@@ -22,11 +22,21 @@ const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладк
|
|||||||
// // // //
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
ЗагрузитьОтладочнуюРаскладку = мир =>
|
ЗагрузитьВыбраннуюРаскладку = мир =>
|
||||||
{
|
{
|
||||||
var модуль = мир.модули.модульПоИмени(ИМЯ_ОТЛ_РАСКЛАДКИ);
|
var указательМодуля = УКАЗАТЕЛЬ_МОДУЛЯ_РЕСУРСОВ;
|
||||||
//var ресурс = "/успех|success.layout";
|
var ресурс = "/X_shaped.layout";
|
||||||
var ресурс = "/провал|failure.layout";
|
if (мир.выбраннаяРаскладка == "😀")
|
||||||
|
{
|
||||||
|
ресурс = "/успех|success.layout";
|
||||||
|
указательМодуля = УКАЗАТЕЛЬ_ОТЛ_РАСКЛАДКИ;
|
||||||
|
}
|
||||||
|
else if (мир.выбраннаяРаскладка == "😭")
|
||||||
|
{
|
||||||
|
ресурс = "/провал|failure.layout";
|
||||||
|
указательМодуля = УКАЗАТЕЛЬ_ОТЛ_РАСКЛАДКИ;
|
||||||
|
}
|
||||||
|
var модуль = мир.модули.модульПоУказателю(указательМодуля);
|
||||||
var содержимое = модуль.содержимое[ресурс];
|
var содержимое = модуль.содержимое[ресурс];
|
||||||
мир.раскладкаKMahjongg = {
|
мир.раскладкаKMahjongg = {
|
||||||
"содержимое": содержимое,
|
"содержимое": содержимое,
|
||||||
@@ -39,7 +49,7 @@ const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладк
|
|||||||
|
|
||||||
ЗагрузитьФишку = мир =>
|
ЗагрузитьФишку = мир =>
|
||||||
{
|
{
|
||||||
var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ);
|
var модуль = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_МОДУЛЯ_РЕСУРСОВ);
|
||||||
var ресурс = "/фишка.gltf";
|
var ресурс = "/фишка.gltf";
|
||||||
var адрес = `${window.location.origin}${ресурс}`;
|
var адрес = `${window.location.origin}${ресурс}`;
|
||||||
THREE.Cache.enabled = true;
|
THREE.Cache.enabled = true;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
надо загрузить ресурсы сцены
|
надо загрузить ресурсы сцены
|
||||||
загрузить фишку
|
загрузить фишку
|
||||||
загрузили фишку
|
загрузили фишку
|
||||||
загрузить отладочную раскладку
|
загрузить выбранную раскладку
|
||||||
разобрать раскладку KMahjongg
|
разобрать раскладку KMahjongg
|
||||||
разобрали раскладку KMahjongg
|
разобрали раскладку KMahjongg
|
||||||
задать отладочную тему фишек для загрузки
|
задать отладочную тему фишек для загрузки
|
||||||
|
|||||||
@@ -109,7 +109,7 @@
|
|||||||
ПодготовитьСцену = мир =>
|
ПодготовитьСцену = мир =>
|
||||||
{
|
{
|
||||||
var коэффициент = 2;
|
var коэффициент = 2;
|
||||||
var расстояние = 6;
|
var расстояние = 14;
|
||||||
мир.камера.position.y = расстояние * коэффициент;
|
мир.камера.position.y = расстояние * коэффициент;
|
||||||
мир.камера.position.z = расстояние;
|
мир.камера.position.z = расстояние;
|
||||||
мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
|
мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
пуск модулей маджонга
|
выбрали раскладку
|
||||||
настроить ThreeJS
|
настроить ThreeJS
|
||||||
встроить отрисовщика ThreeJS
|
встроить отрисовщика ThreeJS
|
||||||
отслеживать изменение размера окна браузера
|
отслеживать изменение размера окна браузера
|
||||||
|
|||||||
176
фишки|tiles.js
176
фишки|tiles.js
@@ -3,6 +3,123 @@
|
|||||||
// // // //
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
УведомитьОПоражении = мир =>
|
||||||
|
{
|
||||||
|
мир.уведомить("поражение");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
УведомитьОПобеде = мир =>
|
||||||
|
{
|
||||||
|
мир.уведомить("победа");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ВывестиПобеду = мир =>
|
||||||
|
{
|
||||||
|
console.debug("ПОБЕДА");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ВывестиПоражение = мир =>
|
||||||
|
{
|
||||||
|
console.debug("ПОРАЖЕНИЕ");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ПроверитьНаличиеФишекНаИгровомПоле = мир =>
|
||||||
|
{
|
||||||
|
if (Object.keys(мир.индексыФишек).length > 0)
|
||||||
|
{
|
||||||
|
мир.уведомить("фишки на игровом поле присутствуют");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
мир.уведомить("фишки на игровом поле отсутствуют");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ВывестиПрисутствиеХодов = мир =>
|
||||||
|
{
|
||||||
|
console.debug("ходы есть");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ВывестиОтсутствиеХодов = мир =>
|
||||||
|
{
|
||||||
|
console.debug("ходов нет");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
ПроверитьНаличиеХодов = мир =>
|
||||||
|
{
|
||||||
|
var номера = мир.доступныеДляВыбораНомераФишек;
|
||||||
|
for (var н0 in номера)
|
||||||
|
{
|
||||||
|
for (var н1 in номера)
|
||||||
|
{
|
||||||
|
// Пропускаем одну и ту же фишку.
|
||||||
|
if (н0 == н1)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var номер0 = номера[н0];
|
||||||
|
var номер1 = номера[н1];
|
||||||
|
var группа0 = мир.группыФишек[номер0];
|
||||||
|
var группа1 = мир.группыФишек[номер1];
|
||||||
|
if (группа0 == группа1)
|
||||||
|
{
|
||||||
|
мир.уведомить("ходы присутствуют");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
мир.уведомить("ходы отсутствуют");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
СобратьДоступныеДляВыбораНомераФишек = мир =>
|
||||||
|
{
|
||||||
|
мир.доступныеДляВыбораНомераФишек = [];
|
||||||
|
for (индекс in мир.индексыФишек)
|
||||||
|
{
|
||||||
|
if (фишкуМожноВыбрать(мир.индексыФишек, индекс))
|
||||||
|
{
|
||||||
|
var номер = мир.индексыФишек[индекс];
|
||||||
|
мир.доступныеДляВыбораНомераФишек.push(номер);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
ЗапуститьПлавноеСкрытиеФишек = мир =>
|
ЗапуститьПлавноеСкрытиеФишек = мир =>
|
||||||
{
|
{
|
||||||
var шаг = 10;
|
var шаг = 10;
|
||||||
@@ -11,7 +128,6 @@
|
|||||||
var дельтаПрозрачности = шаг / длительность;
|
var дельтаПрозрачности = шаг / длительность;
|
||||||
const анимация = setInterval(
|
const анимация = setInterval(
|
||||||
function() {
|
function() {
|
||||||
const позиции = мир.раскладкаKMahjongg.позиции;
|
|
||||||
прозрачность -= дельтаПрозрачности;
|
прозрачность -= дельтаПрозрачности;
|
||||||
// Возвращаем прозрачность материалам перед последующим скрытием фишек.
|
// Возвращаем прозрачность материалам перед последующим скрытием фишек.
|
||||||
// И планируем выход из этой анимации.
|
// И планируем выход из этой анимации.
|
||||||
@@ -214,25 +330,6 @@
|
|||||||
|
|
||||||
ОкраситьНайденнуюФишку = мир =>
|
ОкраситьНайденнуюФишку = мир =>
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
// Очищаем цвета всех фишек.
|
|
||||||
for (var номер in мир.фишки)
|
|
||||||
{
|
|
||||||
var фишка = мир.фишки[номер];
|
|
||||||
var группа = мир.группыФишек[номер];
|
|
||||||
var материал = мир.материалыФишек[группа];
|
|
||||||
фишка.material = материал;
|
|
||||||
}
|
|
||||||
// Окрашиваем выбранные фишки.
|
|
||||||
for (var id in мир.номераВыбранныхФишек)
|
|
||||||
{
|
|
||||||
var номер = мир.номераВыбранныхФишек[id];
|
|
||||||
var фишка = мир.фишки[номер];
|
|
||||||
var группа = мир.группыФишек[номер];
|
|
||||||
var материал = мир.материалыВыбранныхФишек[группа];
|
|
||||||
фишка.material = материал;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
var номер = мир.номерНайденнойФишки;
|
var номер = мир.номерНайденнойФишки;
|
||||||
var фишка = мир.фишки[номер];
|
var фишка = мир.фишки[номер];
|
||||||
var группа = мир.группыФишек[номер];
|
var группа = мир.группыФишек[номер];
|
||||||
@@ -266,25 +363,23 @@
|
|||||||
|
|
||||||
ПроверитьДоступностьФишкиДляВыбора = мир =>
|
ПроверитьДоступностьФишкиДляВыбора = мир =>
|
||||||
{
|
{
|
||||||
// Проверяем заблокированность фишки одновременно с обеих сторон.
|
// Удостоверимся, что это не одна и та же фишка, выбранная дважды.
|
||||||
var позиция = мир.раскладкаKMahjongg.позиции[мир.номерНайденнойФишки];
|
if (мир.номераВыбранныхФишек.length)
|
||||||
var слева = уФишкиЕстьСоседи(мир.индексыФишек, позиция, 0, -2);
|
|
||||||
var справа = уФишкиЕстьСоседи(мир.индексыФишек, позиция, 0, 2);
|
|
||||||
if (слева && справа)
|
|
||||||
{
|
{
|
||||||
return;
|
var номер = мир.номераВыбранныхФишек[0];
|
||||||
}
|
if (номер == мир.номерНайденнойФишки)
|
||||||
|
|
||||||
// Проверяем заблокированность сверху.
|
|
||||||
for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца)
|
|
||||||
{
|
|
||||||
if (уФишкиЕстьСоседи(мир.индексыФишек, позиция, 1, смещениеСтолбца))
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
мир.уведомить("фишка доступна для выбора");
|
// Проверяем доступность с точки зрения правил Маджонга.
|
||||||
|
var позиция = мир.раскладкаKMahjongg.позиции[мир.номерНайденнойФишки];
|
||||||
|
var индекс = индексПозицииФишки(позиция);
|
||||||
|
if (фишкуМожноВыбрать(мир.индексыФишек, индекс))
|
||||||
|
{
|
||||||
|
мир.уведомить("фишка доступна для выбора");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -316,9 +411,8 @@
|
|||||||
for (var номер in позиции)
|
for (var номер in позиции)
|
||||||
{
|
{
|
||||||
var позиция = позиции[номер];
|
var позиция = позиции[номер];
|
||||||
var фишка = мир.фишки[номер];
|
|
||||||
var индекс = индексПозицииФишки(позиция);
|
var индекс = индексПозицииФишки(позиция);
|
||||||
мир.индексыФишек[индекс] = фишка;
|
мир.индексыФишек[индекс] = номер;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -428,7 +522,11 @@
|
|||||||
var размеры = [
|
var размеры = [
|
||||||
(границы.max.x - границы.min.x) / 2,
|
(границы.max.x - границы.min.x) / 2,
|
||||||
(границы.max.z - границы.min.z) / 2,
|
(границы.max.z - границы.min.z) / 2,
|
||||||
границы.max.y - границы.min.y,
|
//границы.max.y - границы.min.y,
|
||||||
|
];
|
||||||
|
var отступы = [
|
||||||
|
0.02,
|
||||||
|
0.02,
|
||||||
];
|
];
|
||||||
|
|
||||||
const позиции = мир.раскладкаKMahjongg.позиции;
|
const позиции = мир.раскладкаKMahjongg.позиции;
|
||||||
@@ -444,8 +542,8 @@
|
|||||||
var слой = позиция[0];
|
var слой = позиция[0];
|
||||||
var ряд = позиция[1];
|
var ряд = позиция[1];
|
||||||
var столбец = позиция[2];
|
var столбец = позиция[2];
|
||||||
фишка.position.x = столбец * размеры[0];
|
фишка.position.x = столбец * (размеры[0] + отступы[0]);
|
||||||
фишка.position.z = ряд * размеры[1];
|
фишка.position.z = ряд * (размеры[1] + отступы[1]);
|
||||||
фишка.position.y = слой;
|
фишка.position.y = слой;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,10 +26,10 @@
|
|||||||
отключить возможность поиска фишки
|
отключить возможность поиска фишки
|
||||||
сравнить выбранные фишки
|
сравнить выбранные фишки
|
||||||
фишки совпадают
|
фишки совпадают
|
||||||
вывести совпадение фишек
|
# вывести совпадение фишек
|
||||||
плавно скрыть фишки
|
плавно скрыть фишки
|
||||||
фишки не совпадают
|
фишки не совпадают
|
||||||
вывести различие фишек
|
# вывести различие фишек
|
||||||
очистить окрашивание первой найденной фишки
|
очистить окрашивание первой найденной фишки
|
||||||
очистить выбор первой найденной фишки
|
очистить выбор первой найденной фишки
|
||||||
включить возможность поиска фишки
|
включить возможность поиска фишки
|
||||||
@@ -40,4 +40,17 @@
|
|||||||
скрыть совпадающие фишки
|
скрыть совпадающие фишки
|
||||||
очистить индексы выбранных фишек
|
очистить индексы выбранных фишек
|
||||||
очистить выбор фишек
|
очистить выбор фишек
|
||||||
включить возможность поиска фишки
|
собрать доступные для выбора номера фишек
|
||||||
|
проверить наличие ходов
|
||||||
|
ходы присутствуют
|
||||||
|
вывести присутствие ходов
|
||||||
|
включить возможность поиска фишки
|
||||||
|
ходы отсутствуют
|
||||||
|
вывести отсутствие ходов
|
||||||
|
проверить наличие фишек на игровом поле
|
||||||
|
фишки на игровом поле присутствуют
|
||||||
|
вывести поражение
|
||||||
|
уведомить о поражении
|
||||||
|
фишки на игровом поле отсутствуют
|
||||||
|
вывести победу
|
||||||
|
уведомить о победе
|
||||||
@@ -1,5 +1,29 @@
|
|||||||
|
|
||||||
|
|
||||||
|
фишкуМожноВыбрать = (индексы, индекс) =>
|
||||||
|
{
|
||||||
|
var позиция = позицияИндексаФишки(индекс);
|
||||||
|
// Проверяем заблокированность фишки одновременно с обеих сторон.
|
||||||
|
var слева = уФишкиЕстьСоседи(индексы, позиция, 0, -2);
|
||||||
|
var справа = уФишкиЕстьСоседи(индексы, позиция, 0, 2);
|
||||||
|
if (слева && справа)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверяем заблокированность сверху.
|
||||||
|
for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца)
|
||||||
|
{
|
||||||
|
if (уФишкиЕстьСоседи(индексы, позиция, 1, смещениеСтолбца))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// // // //
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
@@ -26,8 +50,8 @@
|
|||||||
|
|
||||||
позицияИндексаФишки = (индекс) =>
|
позицияИндексаФишки = (индекс) =>
|
||||||
{
|
{
|
||||||
const x = индекс / 1000000;
|
const x = Math.round(индекс / 1000000);
|
||||||
const y = (индекс - x * 1000000) / 1000;
|
const y = Math.round((индекс - x * 1000000) / 1000);
|
||||||
const z = индекс - x * 1000000 - y * 1000;
|
const z = индекс - x * 1000000 - y * 1000;
|
||||||
return [x, y, z];
|
return [x, y, z];
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user