Файл, реестр и выполняемые программы
В более сложных играх Вы, вероятно, захотите прочитать
данные из файла, который Вы будете поставлять с игрой. Или Вы могли бы захотеть
загружать информацию между запусками игры. И в некоторых ситуациях, Вам,
вероятно, понадобиться выполнять внешние программы.
Информация может быть обнаружена на следующих страницах:
Файлы
Реестр
INI
Файлы
Выполняемые
Программы
Файлы
В более продвинутых играх, Вы, вероятно, захотите, чтобы
данные читались из файла, который будете поставлять с игрой. Например, Вы могли
бы сделать файл, который описывает определённые моменты, которые должны
случиться. Также, Вы, вероятно, захотите сохранить информацию для следующего
запуска игры (например, состояние текущей комнаты). Следующие функции
существует, чтобы читать и записывать данные в текстовые файлы:
file_text_open_read(fname)
Открывает файл с указанным именем для чтения. Функция возвращает id файла, что
должно быть использовано в других функциях. Вы можете открыть много файлов в то
же самое время (32 максимум). Не забывайте закрывать их, когда они завершат
свои действия.
file_text_open_write(fname)
Открывает указанный файл для записи и создаёт файл, если он не существует.
Функция возвращает id файла, что должно быть использовано в других функциях.
file_text_open_append(fname)
Открывает указанный файл для добавления данных при завершении, создаёт их, если
они не существует. Функция возвращает id файла, что должно быть использовано в
других функциях.
file_text_close(fileid)
Закрывает файл с заданным id.
file_text_write_string(fileid,str)
Записывает строку в файл с заданным id.
file_text_write_real(fileid,x)
Записывает реальную величину в файл с заданным id.
file_text_writeln(fileid)
Записывает символ новой строки в файл.
file_text_read_string(fileid)
Читает строку из файла с заданным id и возвращает эту строку. Строка
заканчивается в конце линии.
file_text_read_real(fileid)
Читает реальную величину из файла и возвращает эту величину.
file_text_readln(fileid)
Пропускает остальную часть линии в файл и начинает в начале следующей строки.
file_text_eof(fileid)
Возвращает, если достигнуто окончание файла.
Чтобы манипулировать файлами в Вашей файловой системе, Вы можете
использовать следующие функции:
file_exists(fname)
Возвращает, когда файл с заданным именем существует (истина) или не существует
(ложь).
file_delete(fname)
Удаляет файл с заданным именем.
file_rename(oldname,newname)
Переименовывает файл с именем oldname
в newname.
file_copy(fname,newname)
Копирует файл fname в newname.
directory_exists(dname)
Возвращает, если существует указанная директория. Имя должно содержать полный
путь, а не относительный.
directory_create(dname)
Создаёт директорию с заданным именем (включая путь к ней), если она не
существует. Имя должно содержать полный путь, а не относительный.
file_find_first(mask,attr)
Возвращает имя первого файла, который подходил маске и атрибутам. Если такой
файл не существует, возвращается пустая строка. Маска может содержать путь и
может содержать специальные символы, например 'C:\temp\*.doc. Атрибуты
предоставляют дополнительные файлы, которые Вы хотите видеть. (Так что
нормальные файлы всегда возвращаются, когда они подходят маске.) Вы можете
добавить следующие константы, чтобы увидеть тип файлов:
fa_readonly файлы только для чтения
fa_hidden скрытые файлы
fa_sysfile системные файлы
fa_volumeid файлы тома-идентификатора
fa_directory директории
fa_archive архивные файлы
file_find_next()
Возвращает имя следующего файла, который подходит заданной маске и атрибутам.
Если такой файл не существует, то возвращается пустая строка.
file_find_close() Должно
быть вызвано после обработки всех файлов, чтобы освободить память.
file_attributes(fname,attr)
Возвращает, если файл имеет все атрибуты в attr.
Используйте комбинацию вышеуказанных констант.
Следующие функции могут быть использованы для изменения имени файла.
Отметьте, что эти функции не работают в фактических файлах, они взаимодействуют
только со строками.
filename_name(fname)
Возвращает часть имени указанного файлового имени с расширением, но без пути.
filename_path(fname)
Возвращает часть пути указанного файлового имени, включая обратную косую черту.
filename_dir(fname)
Возвращает часть директории указанного файлового имени, это нормально, так же
как и полный путь, но за исключением обратной косой черты.
filename_drive(fname)
Возвращает информацию устройства filename.
filename_ext(fname)
Возвращает часть расширения указанного файлового имени, включая подачу точки.
filename_change_ext(fname,newext)
Возвращает указанное файловое имя, с расширением (включая точку) изменённое в
новое расширение. Используйте пустую строку как новое расширение. Вы также
можете удалить расширение.
Иногда Вам может понадобиться чтение данных из двоичных файлов. Следующие
подпрограммы "низкого уровня" существуют именно для этого:
file_bin_open(fname,mod)
Открывает файл с указанным именем. Режим указывает, что может подходить файлу:
0 = чтение, 1 = запись, 2 = как чтение, так и запись. Функция возвращает id
файла, что должно быть использовано в других функциях. Вы можете открыть
многочисленные файлы в то же самое время (32 максимум). Не забывайте закрывать
их, как только они завершат свои действия.
file_bin_rewrite(fileid)
Перезаписывает файл с заданным id, то есть, очищает его и начинает записывать в
начале.
file_bin_close(fileid)
Закрывает файл с заданным id.
file_bin_size(fileid)
Возвращает размер (в байтах) файла с заданным id.
file_bin_position(fileid)
Возвращает текущую позицию (в байтах; 0 - первая позиция) файла с заданным id.
file_bin_seek(fileid,pos)
Перемещает текущую позицию файла на указанную позицию. Чтобы добавить позицию
перемещения файла по размеру с перезаписываемым файлом.
file_bin_write_byte(fileid,byte)
Записывает байт данных в файл с заданным id.
file_bin_read_byte(fileid)
Читает байты данных из файла и возвращает его.
Если пользователь выбрал бы безопасный режим в предпочтениях, то для
множества таких программ, Вы не смогли бы определить путь - а только файлы,
находящиеся в папке приложения могут быть, например, записаны.
Если Вы включали файлы в выполняемую игру и автоматически не экспортировали
их в начале игры, то для этого Вы можете использовать следующие функции:
export_include_file(fname)
Экспорт включенного файла с именем fname.
Имя должно быть строковой переменной, так что не забудьте кавычки.
export_include_file_location(fname,location)
Экспорт включенного файла с именем fname
в определенную директорию. Директория должна содержать путь и имя файла.
discard_include_file(fname)
Отказ от включенного файла с именем fname,
используется для освобождения памяти. Имя должно быть строковой переменной, так
что не забудьте кавычки.
Следующие четыре переменные предназначенные "только для чтения"
могут быть полезны:
game_id*
Уникальный идентификатор для игры. Вы можете использовать его, если Вам нужны
уникальные имена файлов.
working_directory*
Прокладывает директорию для игры. (Не включая обратную косую черту.)
program_directory*
Директория, в которой сохранена игровая информация (не ставя в конце обратную
черту). Вы запускаете автономную игру обычно из рабочей директории. Обратите
внимание, что при тестировании игры Вы создаете программу, и рабочая директория
будет другая. В том случае рабочая директория - место, где сохранена доступная
для редактирования версия игры, в то время как каталог программы - временный
каталог для тестирования.
temp_directory* Создаёт
временную директорию для игры. Вы можете загрузить временные файлы в эту папку.
Они будут удалены в конце игры.
В определённых ситуациях, Вы могли бы захотеть предоставить возможность
играющим вносить командные аргументы строк в игру, которые будут выполнены
(например, чтобы создавать чит-коды или специальные режимы). Чтобы получить
такие аргументы, Вы можете использовать две следующие подпрограммы.
parameter_count()
Возвращает число параметров командной строки. Фактические параметры могут быть
найдены со следующей функции. parameter_string(n)
Возвращает параметры командной строки n.
Первый параметр имеет индекс 1. Последний - parameter_count(). Индекс 0 -
специальный. Это имя файла выполнимой игры (включая путь).
Вы можете прочитать величину переменной среды, используя следующую функцию:
environment_get_variable(name)
Возвращает величину (строки) переменной среды с заданным именем.
Реестр
Если Вы захотите загрузить небольшое количество информации
между запусками игры - существует более простой механизм, чем использование
файла. Вы можете использовать регистр. Реестр является большой базой данных,
поддерживаемой Windows, чтобы следить за своего рода установочными параметрами
программ. Вход имеет имя и величину. Вы можете использовать как строки, так и
реальные величины. Для этого существуют следующие функции:
registry_write_string(name,str)
Создаёт вход в реестр с заданной величиной имени и строки.
registry_write_real(name,x)
Создаёт вход в реестр с заданным именем и реальной величиной.
registry_read_string(name)
Возвращает строку, которое содержит заданное имя. (Имя должно существовать - в
противном случае возвращается пустая строка.)
registry_read_real(name)
Возвращает реальную строку, которая содержит заданное имя. (Имя должно
существовать. В противном случае возвращается число 0.)
registry_exists(name)
Возвращает существующее заданное имя.
На самом деле величины в реестре сгруппированы в ключах. Все вышеуказанные
программы работают в величинах в пределах ключей, особенно те, которые
создаются для Вашей игры. Ваша программа может использовать это, чтобы получить
определённую информацию о системе, когда игра работает. Вы можете также
прочитать величины в других ключах. Вы также можете записать их, но будьте
очень осторожны. ВЫ ЛЕГКО МОЖЕТЕ УНИЧТОЖИТЬ СВОЮ СИСТЕМУ таким образом. (Запись
не разрешена в безопасном режиме.) Отметьте, что ключи опять же устанавливаются
в группах. Следующие программы по умолчанию работают в группе
HKEY_CURRENT_USER. Но Вы можете изменить корневую группу. Так, например, если
Вы хотите обнаружить текущую временную директорию, используйте
path = registry_read_string_ext('\Environment','TEMP');
Существуют следующие функции:
registry_write_string_ext(key,name,str) Создаёт вход в ключе реестра с заданной величиной имени и
строки.
registry_write_real_ext(key,name,x) Создаёт вход в ключ реестра с заданным именем и реальной величиной.
registry_read_string_ext(key,name) Возвращает строку, это заданное имя в
указанных ключевых хранилищах. (Имя должно существовать. В противном
случае - возвращается пустая строка.)
registry_read_real_ext(key,name)
Возвращает реальный ключ с заданным именем в указанных ключевых хранилищах.
(Имя должно существовать. В противном случае вовращается число 0.)
registry_exists_ext(key,name)
Возвращает существующее заданное имя в заданном ключе.
registry_set_root(root)
Устанавливает корень для других программ. Используйте следующие величины:
0 = HKEY_CURRENT_USER
1 = HKEY_LOCAL_MACHINE
2 = HKEY_CLASSES_ROOT
3 = HKEY_USERS
INI файлы
Передача определённых установочных настроек параметра в
программу, является стандартным механизмом файлов INI. Файлы INI содержат
секции, и каждая секция содержит множество пар имени-величины. Например, здесь представлен типичный файл INI:
[Form] Top=100 Left=100 Caption=The best game ever [Game] MaxScore=12324
Этот файл содержит две секции: первая - Форма вызова, и вторая - название
Игры. Первая секция содержит три пары. Первые две пары имеют реальную величину,
пока третья имеет величину строки. Такие файлы INI легко могут создаваться и
изменяться в Game Maker. Для этого существуют следующие функции:
ini_open(name)
Открывает файл INI с указанным именем. Файл ini должен быть загружен в одну
папку с игрой!
ini_close() Закрывает к
настоящему времени открытый INI файл.
ini_read_string(section,key,default)
Читает величину строки указанного ключа в указанной секции. Когда ключ или
секция не существует, значение возвращается по умолчанию.
ini_read_real(section,key,default)
Читает реальную величину указанного ключа в указанной секции. Когда ключ или
секция не существует, значение возвращается по умолчанию.
ini_write_string(section,key,value)
Записывает величину строки для указанного ключа в указанной секции.
ini_write_real(section,key,value)
Записывает реальную величину для указанного ключа в указанной секции.
ini_key_exists(section,key)
Возвращает существующий указанный ключ в указанной секции.
ini_section_exists(section)
Возвращает существующую указанную секцию.
ini_key_delete(section,key)
Удаляет указанный ключ из указанной секции.
ini_section_delete(section)
Удаляет указанную секцию.
Выполняемые программы
Game Maker также имеет возможность запускать внешние
программы. Для этого доступны две функции: execute_program и execute_shell.
Функция execute_program запускает программу и, возможно, некоторые аргументы.
Эта функция может ожидать завершения программы (пауза игры) или продолжения
игры. Функция execute_shell открывает файл. Это может быть любой файл, для
которого определена некоторая ассоциация, например html файл, текстовый файл и
т.п. Или это может быть программой. Эта функция не может ожидать завершения, а
продолжит игру.
execute_program(prog,arg,wait)
Выполнять программу prog с
аргументами arg. wait - указывает ожидания перед
завершением.
execute_shell(prog,arg)
Выполняет программу (или файл) в оболочке.
Обе функции не будут работать, если пользователь установит безопасный режим
в предпочтениях. Вы можете проверить это, используя переменную только для
чтения:
secure_mode*
Игра работает в Безопасном режиме.
|