frenneruruu
@frenneruruu
writer, game designer, java/kotlin/lua developer

Как реализовать такой алгоритм?

В рамках самообучения я пытаюсь воссоздать разные игры.

Есть такая игра, Merge Numbers. Там на поле 6х6 нужно в свободные ячейки перемещать фишку со случайным номером. Если рядом с целевой ячейкой будут 2+ аналогичные фишки, то они соберутся в одну с номером на 1 выше.

Интерфейс игры
5fe43c5757058088695170.png


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

Я могу решить эту задачу путём создания шаблонов разных полей из нулей и единиц с последующим их заполнением остальными цифрами с разными зависимостями.

Что-то вроде такого
5fe43f5a3d479688660359.png


Я не эксперт, но мне кажется, что я потрачу на это кучу времени. Есть ли более простое решение?
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Можно генерировать поле "с конца". Что в итоге должно получиться? Очень большое число? Вот и начинайте с него. Скажем, 20. Нужно поэксперементировать - чем больше число, тем более плотно заполнено начальное поле будет.

Берете случайное число на поле, вокруг которого есть 2 свободных клетки. Растраивайте его на три меньших - убираете случайным образом одно из этих трех чисел. Если в результате на поле остается 3 одинаковых числа рядом, то этот ход был невозможным. Проверять достаточно только последние добавленные 2 числа. Запоминайте, какого типа было число - это и будет "случайным" сгенерированным числом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы