Файлы
В более продвинутых играх, Вы, вероятно, захотите, чтобы данные читались из файла, который будете поставлять с игрой. Например, Вы могли бы сделать файл, который описывает определённые моменты, которые должны случиться. Также, Вы, вероятно, захотите сохранить информацию для следующего запуска игры (например, состояние текущей комнаты). Следующие функции существует, чтобы читать и записывать данные в текстовые файлы:
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) Читает байты данных из файла и возвращает его.
Если пользователь выбрал бы безопасный режим в предпочтениях, то для множества таких программ, Вы не смогли бы определить путь - а только файлы, находящиеся в папке приложения могут быть, например, записаны.
Следующие три переменные предназначенные "только для чтения" могут быть полезны:
game_id* Уникальный идентификатор для игры. Вы можете использовать его, если Вам нужны уникальные имена файлов. working_directory* Прокладывает директорию для игры. (Не включая обратную косую черту.) temp_directory* Создаёт временную директорию для игры. Вы можете загрузить временные файлы в эту папку. Они будут удалены в конце игры.
В определённых ситуациях, Вы могли бы захотеть предоставить возможность играющим вносить командные аргументы строк в игру, которые будут выполнены (например, чтобы создавать чит-коды или специальные режимы). Чтобы получить такие аргументы, Вы можете использовать две следующие подпрограммы.
parameter_count() Возвращает число параметров командной строки (отметьте, что само имя программы - одно из них. parameter_string(n) Возвращает параметры командной строки n. Первый параметр имеет индекс 0. Это - имя программы.
Вы можете прочитать величину переменной среды, используя следующую функцию:
Реестр
Если Вы захотите загрузить небольшое количество информации между запусками игры - существует более простой механизм, чем использование файла. Вы можете использовать регистр. Реестр является большой базой данных, поддерживаемой 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:
Этот файл содержит две секции: первая - Форма вызова, и вторая - название Игры. Первая секция содержит три пары. Первые две пары имеют реальную величину, пока третья имеет величину строки. Такие файлы 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) Выполняет программу (или файл) в оболочке.
Обе функции не будут работать, если пользователь установит безопасный режим в предпочтениях. Вы можете проверить это, используя переменную только для чтения:
|