L’uso di file esterni nei giochi è molto utile.
Per esempio, potresti creare un file che descrive in quale momento devono succedere certe cose.
Oppure vuoi probabilmente salvare informazioni per la prossima volta che il gioco sarà eseguito (per esempio, il livello attuale).
Esistono le funzioni seguenti per leggere e scrivere dati su file di testo:
file_text_open_read() | fname | Apre in lettura il file indicato. La funzione restituisce l’id del file che dovrà essere utilizzato in altre funzioni. Si possono aprire più file contemporaneamente (al massimo 32). Non bisogna dimenticarsi di chiuderli quando si è finito con essi. |
file_text_open_write() | fname | Apre in scrittura il file indicato, creandolo se non esiste. La funzione restituisce l’id del file che dovrà essere utilizzato in altre funzioni. |
file_text_open_append() | fname | Apre in append (per aggiungere dati alla fine) il file indicato, creandolo se non esiste. La funzione restituisce l’id del file che dovrà essere utilizzato in altre funzioni. |
file_text_close() | fileid | Chiude il file con l’id dato. |
file_text_write_string() | fileid str |
Scrive la stringa nel file con l’id dato. |
file_text_write_real() | fileid x |
Scrive il valore reale nel file con l’id dato. |
file_text_writeln() | fileid | Scrive un carattere newline nel file. |
file_text_read_string() | fileid | Legge una stringa dal file con l’id dato e restituisce questa stringa. Una stringa termina alla fine della linea. |
file_text_read_real() | fileid | Legge un valore reale dal file e restituisce questo valore. |
file_text_readln() | fileid | Salta il resto della linea nel file e si posiziona all’inizio della prossima linea. |
file_text_eof() | fileid | Restituisce se è stata raggiunta la fine del file. |
Per manipolare i file nel file system si possono usare le funzioni seguenti:
file_exists() | fname | Restituisce se il file con il nome dato esiste (true) o no (false). |
file_delete() | fname | Elimina il file con il nome dato. |
file_rename() | oldname newname |
Rinomina il file con il nome oldname, in newname. |
file_copy() | fname newname |
Copia il file fname in newname. |
directory_exists() | dname | Restituisce se la cartella indicata esiste. Il nome deve includere il percorso completo, non un percorso relativo. |
directory_create() | dname | Crea una cartella con il nome dato (compreso il percorso in avanti) se non esiste. Il nome deve includere il percorso completo, non un percorso relativo. |
file_find_first() | mask attr |
Restituisce il nome del primo file che soddisfa la maschera mask e gli attributi attr. Se tale file non esiste, restituisce una stringa vuota. La maschera può contenere un percorso e può contenere carattery jolly, per esempio'C:\temp\*.doc'. Gli attributi danno i file aggiuntivi che si vogliono vedere. (Perchè i file normali sono sempre restituiti quando soddisfano la maschera.) Si possono aggiungere le seguenti costanti per cedere i file del tipo desiderato: fa_readonly fa_hidden fa_sysfile fa_volumeid fa_directory fa_archive. |
file_find_next() | Restituisce il nome del prossimo file che soddisfa la maschera e gli attributi dati precedentemente. Se tale file non esiste, restituisce una stringa vuota. |
|
file_find_close() | Deve essere chiamata dopo aver gestito tutti i file per liberare memoria. | |
file_attributes() | fname attr |
Restituisce se il file ha tutti gli attributi dati con attr. Utilizza una combinazione delle costanti specificate prima. |
Le funzioni seguenti possono essere usate per cambiare i nomi dei file.
Da notare che queste funzioni non intervengono sui file attuali, si occupano solo delle stringhe.
filename_name() | fname | Restituisce il nome del nome di file specificato, con l’estensione ma senza percorso. |
filename_path() | fname | Restituisce il percorso del nome di file specificato, compreso il backslash alla fine. |
filename_dir() | fname | Restituisce la cartella del nome di file specificato, che normalmente corrisponde al percorso escluso il carattere backslash finale. |
filename_drive() | fname | Restituisce l’unità logica, drive, del nome di file specificato. |
filename_ext() | fname | Restituisce l’estensione del nome di file specificato, compreso il punto iniziale. |
filename_change_ext() | fname newext |
Restituisce il nome, del nome di file specificato, con l’estensione modificata alla nuova estensione newext. Utilizzando una stringa vuota come nuova estensione si elimina l’estensione attuale. |
In rare situations you might need to read data from binary files.
The following low-level routines exist for this:
file_bin_open() | fname mod |
Opens the file with the indicated name. The mode indicates what can be done with the file: 0 = reading, 1 = writing, 2 = both reading and writing). When the file does not exist it is created. The function returns the id of the file that must be used in the other functions. You can open multiple files at the same time (32 max). Don’t forget to close them once you are finished with them. |
file_bin_rewrite() | fileid | Rewrites the file with the given file id, that is, clears it and starts writing at the start. |
file_bin_close() | fileid | Closes the file with the given file id. |
file_bin_size() | fileid | Returns the size (in bytes) of the file with the given file id. |
file_bin_position() | fileid | Returns the current position (in bytes; 0 is the first position) of the file with the given file id. |
file_bin_seek() | fileid pos |
Moves the current position of the file to the indicated position. To append to a file move the position to the size of the file before writing. |
file_bin_write_byte() | fileid byte |
Writes a byte of data to the file with the given file id. |
file_bin_read_byte() | fileid | Reads a byte of data from the file and returns this. |
If the player has checked secure mode in his preferences, for a number of these routines, you are not allowed to specify a path, and only files in the application folder can e.g. be written.
If you included files in the game executable and did not automatically export them at the start of the game, you can use the following functions to do this.
export_include_file() | fname | Exports the included file with the name fname. This must be a string variable, so don’t forget the quotes. |
export_include_file_location() | fname location |
Exports the included file with the name fname to the given location. Location must contain the path and the filename. |
discard_include_file() | fname | Discard the included file with the name fname, freeing the memory used. This must be a string variable, so don’t forget the quotes. |
The following four read-only variables can be useful:
game_id | Unique identifier for the game. You can use this if you need a unique file name. |
working_directory | Working directory for the game. (Not including the final backslash.) |
program_directory | Directory in which the game executable is stored. (Not including the final backslash.) When you run a standalone game this is normally the same as the working directory unless the game e.g. opens a file using the file selector. Note that when testing a game you are creating the program and working directory will be different. In that case the working directory is the place where the editable version is stored while the program directory is a temporary directory for testing. |
temp_directory | Temporary directory created for the game. (Not including the final backslash.) You can store temporary files here. They will be removed at the end of the game. |
In certain situations you might want to give players the possibility of providing command line arguments to the game they are running (for example to create cheats or special modes).
To get these arguments you can use the following two routines
parameter_count() | Returns the number of command-line parameters. The actual parameters can be retrieved with the following function. |
parameter_string(n) | Returns command-line parameters n. The first parameter has index 1. The last one has index parameter_count(). Index 0 is a special one. It is the filename of the game executable (including the path). |
You can read the value of environment variables using the following function:
environment_get_variable() | name | Returns the value (a string) of the environment variable with the given name. |
Finally, if you are interested in the size of the disk and the free space, you can use the following functions:
disk_size() | drive | Returns the size of the indicated drive in bytes. drive must be a capital letter, e.g. ‘C’. If you do not provide the drive, the drive of the current working directory is used. |
disk_free() | drive | Returns the amount of free space on the indicated drive in bytes. drive must be a capital letter, e.g. ‘C’. If you do not provide the drive, the drive of the current working directory is used. |