diff --git a/0000 b/0000
index 300db94..ad29761 100644
--- a/0000
+++ b/0000
@@ -7,4 +7,5 @@ x /интерфейс|ui.js
x /пуск|run.js
/пуск|run.череда
x /тема|theme.js
-/тема|theme.череда
\ No newline at end of file
+/тема|theme.череда
+x /функции|functions.js
\ No newline at end of file
diff --git a/интерфейс|ui.js b/интерфейс|ui.js
index 61bb98a..55295b0 100644
--- a/интерфейс|ui.js
+++ b/интерфейс|ui.js
@@ -3,6 +3,136 @@
// // // //
+СоздатьОкноПоражения = мир =>
+{
+ var структура = `
+
+
+
+ Поражение
+
+
+
Перезапустить игру с раскладкой:
+ Решаемой
+ Нерешаемой
+
+
+
+
+ `;
+ var вид = `
+
+#окно-поражение-тело
+{
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ pointer-events: all;
+}
+#окно-победы
+{
+ opacity: 0;
+ background-color: white;
+ animation: fadeInОкноПоражения 1s ease;
+ animation-fill-mode: forwards;
+ position: fixed;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+@keyframes fadeInОкноПоражения
+{
+ 0%
+ {
+ opacity: 0;
+ }
+ 100%
+ {
+ opacity: 1;
+ }
+}
+
+ `;
+ мир.окноПоражения = добавитьОкно("окно-поражения", структура, вид);
+ $("#перезапустить-раскладку-решаемую").click(function() {
+ мир.уведомить("кнопка перезапуска с решаемой раскладкой");
+ });
+ $("#перезапустить-раскладку-нерешаемую").click(function() {
+ мир.уведомить("кнопка перезапуска с нерешаемой раскладкой");
+ });
+};
+
+
+// // // //
+
+
+СоздатьОкноПобеды = мир =>
+{
+ var структура = `
+
+
+
+ Победа
+
+
+
Перезапустить игру с раскладкой:
+ Решаемой
+ Нерешаемой
+
+
+
+
+ `;
+ var вид = `
+
+#окно-победы-тело
+{
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ pointer-events: all;
+}
+#окно-победы
+{
+ opacity: 0;
+ background-color: white;
+ animation: fadeInОкноПобеды 1s ease;
+ animation-fill-mode: forwards;
+ position: fixed;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+@keyframes fadeInОкноПобеды
+{
+ 0%
+ {
+ opacity: 0;
+ }
+ 100%
+ {
+ opacity: 1;
+ }
+}
+
+ `;
+ мир.окноПобеды = добавитьОкно("окно-победы", структура, вид);
+ $("#перезапустить-раскладку-решаемую").click(function() {
+ мир.уведомить("кнопка перезапуска с решаемой раскладкой");
+ });
+ $("#перезапустить-раскладку-нерешаемую").click(function() {
+ мир.уведомить("кнопка перезапуска с нерешаемой раскладкой");
+ });
+};
+
+
+// // // //
+
+
СоздатьГлавноеОкно = мир =>
{
мир.главноеОкно = document.createElement("div");
diff --git a/интерфейс|ui.череда b/интерфейс|ui.череда
index be7238b..788a03b 100644
--- a/интерфейс|ui.череда
+++ b/интерфейс|ui.череда
@@ -1,2 +1,6 @@
пуск модулей маджонга
- создать главное окно
\ No newline at end of file
+ создать главное окно
+победа
+ создать окно победы
+поражение
+ создать окно поражения
\ No newline at end of file
diff --git a/пуск|run.js b/пуск|run.js
index 968a96f..dc51778 100644
--- a/пуск|run.js
+++ b/пуск|run.js
@@ -3,6 +3,28 @@
// // // //
+ПерезапуститьСРешаемойРаскладкой = мир =>
+{
+ задатьПараметрВСтрокеПоиска("🚧", "😀");
+ document.location.reload();
+ console.debug("Перезапустить РЕШ");
+};
+
+
+// // // //
+
+
+ПерезапуститьСНерешаемойРаскладкой = мир =>
+{
+ задатьПараметрВСтрокеПоиска("🚧", "😭");
+ document.location.reload();
+ console.debug("Перезапустить НЕРЕШ");
+};
+
+
+// // // //
+
+
ЗапуститьМодулиМаджонга = мир =>
{
мир.уведомить("пуск модулей маджонга");
diff --git a/пуск|run.череда b/пуск|run.череда
index 99ad3b5..05b6220 100644
--- a/пуск|run.череда
+++ b/пуск|run.череда
@@ -1,3 +1,7 @@
пуск маджонга
задать заголовок браузера
- запустить модули маджонга
\ No newline at end of file
+ запустить модули маджонга
+кнопка перезапуска с решаемой раскладкой
+ перезапустить с решаемой раскладкой
+кнопка перезапуска с нерешаемой раскладкой
+ перезапустить с нерешаемой раскладкой
\ No newline at end of file
diff --git a/функции|functions.js b/функции|functions.js
new file mode 100644
index 0000000..2c3d5cf
--- /dev/null
+++ b/функции|functions.js
@@ -0,0 +1,53 @@
+
+// // // //
+
+
+добавитьОкно = (id, html, css) =>
+{
+ var окно = document.createElement("div");
+ окно.id = id;
+ окно.innerHTML = html;
+ var вид = document.createElement("style");
+ вид.innerHTML = css;
+ document.body.appendChild(окно);
+ document.head.appendChild(вид);
+ return окно;
+};
+
+
+// // // //
+
+
+задатьПараметрВСтрокеПоиска = (ключПараметра, значениеПараметра) =>
+{
+ var строкаПоиска = decodeURI(window.location.search);
+ var текущийАдрес = decodeURI(window.location.href);
+
+ // Заменить параметр.
+ if (строкаПоиска.includes(`${ключПараметра}=`))
+ {
+ var части = строкаПоиска.split(/[\?&]/);
+ for (var номер in части)
+ {
+ var часть = части[номер];
+ if (часть.startsWith(`${ключПараметра}=`))
+ {
+ var значение = часть.split("=")[1];
+ var адрес = текущийАдрес.replace(значение, значениеПараметра);
+ history.pushState(null, "", адрес);
+ break;
+ }
+ }
+ }
+ // Добавить параметр.
+ else
+ {
+ var префикс = "?";
+ if (строкаПоиска.startsWith("?"))
+ {
+ префикс = "&";
+ }
+ var адрес = текущийАдрес + префикс + `${ключПараметра}=` + значениеПараметра;
+ history.pushState(null, "", адрес);
+ }
+};
\ No newline at end of file