2014-12-16 8 views
0

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

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

Я был бы признателен, если бы кто-нибудь мог дать мне объяснение о том, как написать самомодифицирующийся код Python, чтобы сделать только, что желательно с примером, так как это помогает понять.

+3

Вы считали, что просто сохранили файл как двоичный файл, чтобы его нельзя было прочитать? – marsh

+3

Не делайте этого. Просто зашифруйте их. Полная безопасность практически невозможна (это та же проблема, что и DRM), но, возможно, зашифрованного двоичного файла должно быть достаточно, чтобы остановить любого случайного пользователя. – rlms

+2

Я не думаю, что при написании программы необходимо учитывать «меньше дополнительных файлов». В некоторых моих любимых играх есть десятки и десятки конфигурационных файлов, а также файлы и файлы звуковых эффектов и подкаталогов и ... Это не делает их менее интересными для игры. – Kevin

ответ

2

Мое первое наклонение - сказать «не делай этого». Самонастраивающийся Python (на самом деле любой язык) делает чрезвычайно сложным поддерживать версию библиотеки.

  1. Вы исправляете ошибку и нуждаетесь в перераспределении - как вы объедините данные, которые вы сохранили с помощью самомодификации.
  2. Очень сложно аутентифицировать упаковку с помощью хэша - после изменения локальной версии трудно определить, какая версия возникла из-за того, что SHA не будет соответствовать.
  3. Это небезопасно. Вы можете просто сохранить и загрузить класс Python, который не хранится вместе с вашим пакетом, однако, если он доступен для записи, внешний процесс может добавить любой произвольный код Python в этот файл для оценки. Вроде как SQL-инъекция, но стиль Python.

Python делает так тривиально загружать и удалять файлы JSON, что для простых вещей я бы не подумал ни о чем другом. Даже CSV-файлы тривиальны и могут быть привязаны к картам, но их можно легко манипулировать как данные, используя ваш любимый редактор электронных таблиц.

Мое предложение - не используйте самомодифицирующийся Python, если вы просто не хотите экспериментировать; Это просто не практическое решение в реальном мире, если вы не работаете во встроенной среде, где диск и память являются премией.

+0

Я честно не думал о каких-либо проблемах, связанных с самомодификацией, кроме самой кодировки (и заставить ее работать). На самом деле я бы хотел экспериментировать прямо сейчас, но теперь похоже, что это не привело бы меня гораздо ближе к тому, что я на самом деле желаю достичь ... спасибо за головы, наверное. – MMM

Смежные вопросы