Як би я створив систему паролів для однокористувацької гри, як для тих, що використовуються в старих консольних іграх?
Наприклад, Mega Man X економить роботу, надаючи вам ряд номерів, які ви можете ввести пізніше, щоб завантажити своє збереження.
Як би я створив систему паролів для однокористувацької гри, як для тих, що використовуються в старих консольних іграх?
Наприклад, Mega Man X економить роботу, надаючи вам ряд номерів, які ви можете ввести пізніше, щоб завантажити своє збереження.
Відповіді:
По-перше, розбийте свій ігровий стан (вірніше, аспекти стану, який ви хочете зберегти). У випадку з грою в стилі Mega Man ви можете відстежити, кого з босів кінцевого рівня ви вбили, кількість підсилювачів енергетичних резервуарів тощо.
Упакуйте всі ці дані в бітове поле, тобто призначте кожне значення відповідної кількості бітів:
У нашому прикладі всього 8 біт, що означає, що один символ може представляти пароль. На практиці ваша гра, швидше за все, матиме більше стану і, таким чином, вимагатиме більше загальних бітів і, отже, більше символів. Як зазначається в коментарях тут і в інших місцях цього питання, такий підхід працює для "ретро" ігор або інших ігор, де розмір захопленого стану гри є розумним. Поза певним моментом ви можете виявити, що складність паролів, необхідних для кодування вашого стану, занадто велика.
Щоб зменшити ймовірність випадкового спостереження зламати пароль, ви можете перетворити макет бітів таким чином, щоб ви вводили фіктивні біти (які не впливають на стан гри, але завдяки чому пароль виглядає інакше, коли ви інтерпретуєте всі біти як символи) або запускаєте за допомогою деяких оборотних хеш-операцій зіскоблювати біти навколо, щоб усі біти "вбитого поля X " знаходилися не поруч з іншим, завдяки чому відповідні паролі послідовного стану виглядають дуже по-різному, або вводяться значення контрольної суми.
Якщо ви копаєтеся, там є досить багато інформації про системи, які використовуються для деяких найпопулярніших ігор з паролем:
Ви можете прочитати про них для додаткового натхнення.
Ці ігри врятували лише стан, в який я вірю. Пароль просто посилається на рівень для завантаження. Просто використовуйте словник для чогось подібного.
Якщо це трохи складніше, наприклад, мати певну зброю або бустер, ви можете зашифрувати стан на короткий (але досить довгий) хеш-код.
Але я настійно раджу вам не користуватися цим. Пароль швидко пошириться в Інтернеті, і незабаром всі виграли вашу гру.
Хоча такі рішення, як система персонажів Джоша Петрі, мають переваги (невеликий розмір збереження, працює на всіх примірниках гри), вони з'єднують дизайн ігор та державну систему, щоб бути невід'ємною для парольної системи. Будь-яка зміна пароля, штату чи дизайну, і вся система розпадається.
Набагато простішим рішенням було б скласти свою систему збереження відповідно до норми та просто додати систему паролів у верхній частині. Це може бути таким же простим, як збереження пароля в збереженні (можливо, подвоєння як ім'я файлу) та перевірка його при завантаженні, або настільки ж складне, як використання однієї з багатьох бібліотек шифрування навколо (що досить тривіально).
Здається, існує певна плутанина навколо цієї відповіді.
1) Оператор просто попросив пароль, який дозволить їм завантажити збереження ... немає вимоги, щоб пароль був збереженням.
2) У багатьох іграх сьогодні є значна потреба в збереженні, ми просто створили внутрішню систему швидкого збереження / завантаження, яка виробляла файли розміром 10 Мб ... для вікторини! Система збереження Джоша Петрі , хоча термін дії дуже обмежений - як тільки система магазину стає нетривіальною, паролі повинні мати величезну довжину, щоб зберігати всі відповідні дані.
Наприклад, що станеться, якщо є 30 начальників? 20 досягнень? Ми на півдорозі досягнення? На якому рівні він знаходиться? Скільки біт ми відкладемо за здоров'я, життя, монети, xp? Що робити, якщо знімок не є станом між рівнями ..., але на півдорозі через рівень - позиції гравця, вороги, снаряди, зруйновані / змінені місцевості раптом складають багато стану, який потрібно зберігати.
В перспективі, маючи на увазі алфавіт з 30 символами та паролем з десятьма літерами, ми маємо приблизно 50 біт, які варто зберігати. Не рідкість бачити, як гра / движок використовує до 320 біт лише для зберігання положення одного об'єкта, обертання та масштабування. Звичайно, ви можете робити всілякі оптимізаційні трюки, щоб зробити більше з меншим ... але в кінцевому підсумку ви витрачаєте час, присвячений для того, щоб зробити гру веселою - одна з найгірших оптимізацій, яку ви можете зробити.