У меня самая продаваемая игра Судоку в магазине приложений для iOS. Вот как я генерировал головоломки.
Сначала у меня есть приложение-генератор головоломок. Но это не часть кода игры. Это отдельное приложение, которое я использую для создания головоломок. Он сильно модифицирован, поэтому я могу настроить его для создания различных типов паттернов, рейтингов сложности, количества подарков и т. Д. Генерировать головоломки и получать постоянный уровень сложности сложно на лету, и это займет больше времени, чем игрок хотел бы ждать. Итак, я генерирую то, что я называю «начальными головоломками», и именно это используется кодом игры для генерации головоломок, в которые играют люди.
Я не отвечаю, как кодировать генератор здесь. Вы можете гуглить и найти тонны кода генератора головоломок онлайн. Начни там. Но чтобы сделать хорошую игру, нужно сделать хорошую игру. Моя игра не генерирует головоломки на лету.
Моё приложение-генератор головоломок работает так, что оно генерирует тысячи головоломок в минуту, но они не все хороши и не все соответствуют определенному уровню сложности. Генератор создает головоломку, затем решает ее, вычисляет рейтинг сложности и оценивает головоломку на основе методов, необходимых для ее решения, и определяет, требуется ли угадывание для ее решения (что обычно плохо). Он выбрасывает любые головоломки, которые не соответствуют критериям. Для сложных, но не невозможных головоломок на быстрой машине может потребоваться час, чтобы создать 100 головоломок, которые точно соответствуют моим требованиям. Вот почему я не делаю это в приложении. Создание головоломок на лету с этими жесткими характеристиками не сработает для того качества головоломок, которое есть в моем приложении.
Головоломки - это строки длиной 162 символа, 81 символ с цифрами и тире или точками, где должны быть пробелы, а затем еще 81 с решением. Затем столбцы для каждой статистики, например, сколько синглов, пар и т. Д.
Мой вывод из всех сеансов генерации - это разделенные запятыми строки со статистикой в виде столбцов. Я возьму, может быть, 10 000 головоломок, принесу их, чтобы преуспеть, и рассортирую их по сложности. Затем внесите их в приложение, чтобы увидеть их на игровом поле. Я также смотрю на них для визуальной привлекательности и видимых образцов для загадки. Тогда я вручную выбираю из них.
Я называю их загадками семян и вот что я имею в виду. Числа в игре судоку на самом деле просто жетоны. Вместо цифр 1-9 они могут быть цветами, символами или буквами. Так что мои загадки с семенами - это не цифры, а буквы ai. Каждая головоломка с семенами меняется на лету, чтобы создать играбельную головоломку:
- Перемешать числа / токены. Когда я превращаю буквы ai обратно в числа 1-9, таблица поиска рандомизируется. Это означает, что a не всегда 1. Это само по себе создает около 300 000 вариаций для каждой головоломки.
- Поверните головоломку на 90, 180 или 270 градусов. Это добавляет еще 4 варианта.
- Флоп головоломки по горизонтали, вертикали или оба. Это добавляет еще 4 варианта.
Следовательно, каждая начальная головоломка может создать 5 806 080 вариаций. Я проверил это на поле с реальными игроками. Люди не знают, что они играют в одну и ту же головоломку. На самом деле это невозможно. Только если они заметят, что шаблон, в котором даны, одинаков каждый раз. Но даже с 100 различными семенами никто не заметит. Миллион пользователей моей игры не имеет. Я также проверил это с решающими приложениями. Приложение решателя не решит головоломку так же, как при повороте или провале. Иногда он даже анализирует его как другой уровень сложности, хотя технически это та же головоломка.
Тем не менее, книга Big Bad Sudoku Book содержит 10 из 1000 головоломок с семенами на 5 уровнях сложности и несколько типов головоломок. Это значит, что в моей игре миллиарды головоломок. С каждыми 10 000 загадками семян есть 58 060 800 000 различных загадок.
В Книге Судоку версии 4 (выйдет в 2016 году) я нашел способ уточнить точную головоломку из этих 58 миллиардов и получить такую же головоломку на устройстве каждого игрока.