Программисты игр полагаются на один из двух основных способов хранения данных:
- хранить каждый файл данных как отдельный файл
- хранить каждый файл данных в произвольном формате архива
Недостатком первого решения является проблема неиспользуемого дискового пространства, а также проблема более медленных установок.
Второе решение имеет свои собственные подводные камни, во-первых, вы должны написать все свое изображение / звук / и т.д. загрузка подпрограмм, использующих пользовательский API для доступа к архивным данным. Еще одним недостатком является то, что вы должны написать свою собственную утилиту архивирования для создания архивов в первую очередь.
Если вы не будете всегда загружать все файлы из архива, TAR / GZ может быть не очень хорошей идеей, потому что вы не можете извлекать определенные файлы так, как вам нужно. По этой причине во многих играх используются ZIP-архивы, которые позволяют извлекать отдельные файлы по мере необходимости (хорошим примером является Quake 3, файлы PK3 которого представляют собой не что иное, как ZIP-файлы с другим расширением).
РЕДАКТИРОВАТЬ: «Скрыть» структуру папок игры и «Сохранить» только исполняемые файлы
Другое решение часто используется для «скрытия» файлов игры в структуре папок. Сохраните только свои исполняемые файлы и, возможно, файл readme в главном каталоге и переместите файлы игры в подпапку с именем «data» или другой связанной с ней.
РЕДАКТИРОВАТЬ: Gamedev Tuts Plus есть хороший ресурс
РЕДАКТИРОВАТЬ: библиотека
Одно из возможных решений libarchive, которое представляет собой архивную библиотеку, которая будет обрабатывать извлечение файлов из архива, такого как ZIP-файл. Он даже позволяет назначить извлеченный файл стандартному указателю FILE, что делает взаимодействие с другими библиотеками потенциально более простым.
РЕДАКТИРОВАТЬ: файлы формата ZIP с альтернативным расширением
Здесь мне нравится @Joachim Sauer Комментарий
Использование файлов в формате ZIP с альтернативными расширениями имеет большую традицию и вне игр: Java это делает , формат OpenDocument (он же формат OpenOffice / LibreOffice) , даже Office Open XML (он же «новый» формат Microsoft Office) это делает .