Это бонусная история для всех, кто читал мой отчет об алгоритмическом решении пасьянса с привязкой на Rust. Если вы его пропустили, вы можете найти его здесь.

Я заметил, что когда я писал о такой хорошей игре и предоставлял реализацию для нее решателя, это выглядело немного сухо, когда не предоставлялось всем возможность наслаждаться игрой. По этой причине я создал веб-приложение на основе Vue, которое позволяет вам играть в игру в браузере. И настольный компьютер, и планшет / мобильный телефон должны работать на вас.

Но это еще не все!

В дополнение к этому вы можете найти кнопку рядом с игрой, которая срабатывает, чтобы закончить игру для вас автоматически! Это можно использовать на любом этапе игры, пусть это будет в начале или после некоторых ваших действий. Алгоритм, работающий за кадром, именно тот, что описан в вышеупомянутом аккаунте. Также он выяснит, не может ли быть достигнуто какое-либо решение из определенного состояния.

Конечно, несмотря на то, что Rust так хорошо подходит для комбинаторных и числовых задач, браузер не может его запустить. Скорее, мы должны скомпилировать Rust на общую платформу, которую может понять браузер, и это WebAssembly.

Итак, наш алгоритм компилируется в WebAssembly, загружается, инициализируется и затем запускается браузером. Как мы знаем, Rust является одним из самых быстрых, когда речь идет о задачах с высокой нагрузкой на процессор. К счастью, поскольку WebAssembly — это очень оптимизированный код, работающий на скорости, близкой к исходной, мы не слишком много теряем по нашей методологии.

Хотя, даже если алгоритм гарантированно работает относительно быстро, если вы активируете его на очень ранней стадии игры, вам, возможно, придется подождать пару секунд в зависимости от вашего устройства. Как известно большинству из вас, браузер, по сути, запускает код JavaScript и WebAssembly в одном потоке. Это означает, что запуск длительной задачи заморозит страницу на это время и заблокирует любую обработку пользовательских событий. Например, мы можем захотеть дать пользователю возможность прервать эту длительную задачу, потому что это может занять слишком много времени.

Решением этой проблемы являются WebWorkers. Это конструкция, которая позволяет нам запускать код (JavaScript/WebAssembly) в браузере в другом потоке. Этот поток работает полностью независимо от основного контекста выполнения браузера, но может взаимодействовать через очень современную систему обмена сообщениями. Подобные способы установления связи между потоками были приняты такими языками, как Go и Rust через их каналы.

Более подробную информацию о том, как скомпилировать Rust в WebAssembly, а затем интегрировать его в приложение Vue для запуска кода внутри WebWorker, можно найти здесь.

Ладно, слов сказано достаточно, приступим к игре!

Вы найдете его здесь. Веселиться!

(должны поддерживаться настольные компьютеры, мобильные устройства и планшеты)

Обратите внимание, хотя эта история открыта для публики, упомянутые истории — нет. Чтобы получить их все, вы должны быть членом среды. Если вы заинтересованы, но все еще не являетесь участником, вам будет предложено сделать это по следующей ссылке. Несмотря на то, что я большой сторонник открытого исходного кода, открытого обучения и открытых исследований, мне приходится закрывать некоторые из моих историй (обучение + исследовательский материал), чтобы продолжать создавать эти вещи.

Спасибо за Ваше понимание!