Как бы я создал систему паролей для однопользовательской игры, подобной той, что использовалась в старых консольных играх?
Например, Mega Man X сохраняет работу, предоставляя вам серию чисел, которые вы можете ввести позже, чтобы загрузить свое сохранение.
Ответы:
Во-первых, разбейте свое игровое состояние (или, скорее, аспекты состояния, которое вы хотите сохранить). В случае игры в стиле Mega Man, вы можете отследить, какого из боссов конечного уровня вы убили, сколько бонусов, похожих на энергетические танки, у вас есть, и так далее.
Упакуйте все эти данные в битовое поле, то есть назначьте соответствующее количество битов каждому значению:
В нашем примере всего 8 бит, что означает, что один символ может представлять пароль. На практике ваша игра, вероятно, будет иметь больше состояний и, следовательно, потребует больше битов и, следовательно, больше персонажей. Как отмечено в комментариях здесь и в других частях этого вопроса, этот подход работает для «ретро» игр или других игр, где размер захваченного игрового состояния является разумным. Помимо определенного момента, вы можете обнаружить, что сложность паролей, необходимых для кодирования вашего состояния, слишком велика.
Чтобы уменьшить вероятность случайного наблюдения за взломом пароля, вы можете преобразовать раскладку битов так, чтобы вы вводили фиктивные биты (которые не влияют на состояние игры, но заставляют пароль выглядеть иначе, когда вы интерпретируете все биты как символы), или запускаете это с помощью некоторой обратимой операции, подобной хешу, чтобы скремблировать биты так, чтобы все биты «уничтоженной коробки X » не находились рядом друг с другом, заставляя соответствующие пароли последовательного состояния выглядеть совсем иначе или вводить значения контрольной суммы.
Если вы покопаетесь вокруг, то получите немало информации о системах, используемых для некоторых из самых популярных игр с паролем:
Вы можете прочитать о них для дополнительного вдохновения.
источник
Те игры только спасли состояние, в которое я верю. Пароль просто указывает уровень загрузки. Просто используйте словарь для чего-то вроде этого.
Если это немного сложнее, например, наличие определенного оружия или бустера, вы можете зашифровать состояние с помощью короткого (но достаточно длинного) хеш-кода.
Но я настоятельно советую вам не использовать это. Пароль будет быстро распространяться в Интернете, и вскоре все выиграли вашу игру.
источник
Ну, в принципе, вы могли бы сделать это так:
Боссы убиты = 7
Количество монет = 36
Владеет Мечом = 0 (Нет)
Владеет сердцем = 1 (да)
Текущий уровень = 6
Текущий мир = 9
Здоровье = 100
Код = 7V36R0A1T6O9A100
В основном каждая буква отделяет Типы
источник
В то время как такие решения, как система преобразования персонажа в состояние Джоша Петри, имеют свои преимущества (небольшой размер сохранения, работает на всех копиях игры), они объединяют дизайн игры и систему состояний по своей сути с системой паролей. Любое изменение пароля или состояния или дизайна и всей системы рушится.
Гораздо более простым решением было бы создать систему сохранения в соответствии с обычным режимом и просто добавить систему паролей сверху. Это может быть так же просто, как сохранить пароль при сохранении (возможно, удвоить как имя файла) и проверить его при загрузке, или так же сложно, как использовать одну из множества библиотек шифрования (что довольно тривиально).
Кажется, есть некоторая путаница вокруг этого ответа.
1) Оператор просто запросил пароль, который позволит им загрузить сохранение ... нет требования, чтобы пароль был сохранением.
2) Многие игры сегодня требуют значительного сохранения памяти, мы только что создали систему быстрого сохранения / загрузки, которая производила файлы размером 10 МБ ... для игры-викторины! Система сохранения Джоша Петри , хотя действительность очень ограничена - как только система хранения становится нетривиальной, пароли должны иметь огромную длину, чтобы сохранить все соответствующие данные.
Например, что произойдет, если будет 30 боссов? 20 достижений? Мы на полпути к достижению? На каком уровне он находится? Сколько бит мы откладываем на здоровье, жизни, монеты, хр? Что если снимок не в состоянии между уровнями ... а на полпути через уровень - позиции игрока, врагов, снарядов, разрушенной / измененной местности внезапно складываются во множество состояний, которые необходимо сохранить.
Для перспективы, принимая 30-символьный алфавит и десятибуквенный пароль, у нас есть информация для хранения примерно на 50 битов. Нередки случаи, когда игра / движок использует до 320 битов только для хранения позиции, поворота и масштабирования отдельного объекта. Конечно, вы можете делать все виды приемов оптимизации, чтобы делать больше с меньшими затратами ... но в конечном итоге вы тратите время, потраченное на то, чтобы сделать игру увлекательной - одна из худших оптимизаций, которую вы можете сделать.
источник