« Előző oldal- - - ^Tartalom^- - - Következő oldal »



ÁLLOMÁNYKEZELÉS, BEJEGYZÉS KÉSZÍTÉSE ÉS PROGRAMOK FUTTATÁSA:

A komolyabb programok már több állományt tartalmazhatnak, pl. adatokat arról, hogy milyen cselekvések történjenek vagy a játék szereplőit, háttereit, mentéseket, stb.
Vagy szükség lehet adatokat tárolni a játék futásai között. Némely helyzetekben szükség lehet külső programok végrehajtására.

file_exists(fnev) - létezik-e vagy nem az fnev állomány.
file_delete(fnev) - az fnev állomány törlése.
file_rename(reginev,ujnev) - a reginev állomány átnevezése ujnev-re.
file_copy(fnev,ujnev) - az fnev állomány átmásolása ujnev-be.
file_open_read(fnev) - az fnev állomány megnyitása olvasásra. (Újabb GM változatokban ez és az alábbi néhány fájlkezelő függvény helyett már a lentebbi, szöveges állományokat kezelő függvények használhatók.)
file_open_write(fnev) - az fnev állomány megnyitása írásra (létrejön, ha eddig nem volt).
file_open_append(fnev) -az fnev állomány megnyitása hozzáírásra (létrejön, ha nem létezett).
file_close() - az aktuális fájl bezárása (soha ne feledkezzünk meg erről! A megnyitott állományokat le is kell zárni, különben az adatok elvesznek!)
file_write_string(str) - az str szöveg beleírása az éppen nyitott állományba.
file_write_real(x) - az x valós szám beleírása az éppen nyitott állományba.
file_writeln() - egy "új sor" jelet ír be az állományba.
file_read_string() - egy szöveget olvas ki az állományból és ezzel tér vissza. A szöveg a sor végénél ér véget.
file_read_real() - egy valós számot olvas ki az állományból és ezzel tér vissza.
file_readln() - ugrás az állományban a következő sor elejére.
file_eof() - elértük-e az állomány végét.

directory_exists(knev) - létezik-e a knev könyvtár (mappa).
directory_create(knev) - a knev mappa létrehozása.
file_find_first(eleres,tul) - visszatér az első állománnyal, amely megfelel az eleres és tul paramétereknek. Ha nem talál, akkor a visszatérési érték egy üres szöveg lesz. Az eleres az elérési utat és a fájlnevet tartalmazza (helyettesítő - joker - jelek is szerepelhetnek), pl. minden doc állomány a játék saját mappáján (pont a jele) belül lévő "leiras" mappából: '.\leiras\*.doc'.
A tul az állomány tulajdonságát jelzi, mely lehet:
- fa_readonly - csak olvasható (írásvédett)
- fa_hidden - rejtett
- fa_sysfile - rendszer
- fa_volumeid - kötet-azonosító fájl (?)
- fa_directory - könyvtár (mappa)
- fa_archive - archiválandó (a tartalma megváltozott)
file_find_next() - visszatér a következő állomány nevével, amely megfelel az előző parancsban megadott eleres és tul paramétereknek. Ha nincs ilyen, egy üres szöveg a visszatérési érték.
file_find_close() - meg kell hívni, miután megtörtént az összes állomány kezelése, hogy a memória felszabaduljon.
file_attributes(fnev,tul) - megvan-e az fnev állománynak minden tul-ban megadott jellemzője. A file_find_first-nél bemutatott állományjellemzők (attribútumok) használhatók.

Ha beemeltünk fájlokat a futtatható játékba, és nem önműködően exportálódnak a játék kezdetekor, akkor ennek elvégzésére a következő függvények használhatók (GM 7-től):
export_include_file(fnev) - az fnev nevű beemelt fájl exportálása. Ennek egy szöveges változónak kell lennie, tehát ne felejtsük az idézőjeleket.
export_include_file_location(fnev,hely) - az fnev nevű beemelt fájl exportálása az adott helyre. A helynek tartalmaznia kell az elérési utat és a fájlnevet.
discard_include_file(fnev) - az fnev nevű beemelt fájl elhagyása, felszabadítva a használt memóriát. Ennek egy szöveges változónak kell lennie, tehát ne felejtsük az idézőjeleket.

A következő négy változó értéke csak lekérdezhető:

game_id - a játék egyéni azonosítója.
working_directory - a játék munkamappája (az utolsó visszaper-jelet nem jelzi ki).
program_directory - könyvtár (mappa), melyben az önállóan futtatható játék tárolódik. (Az utolsó visszaper-jel nélkül.) Egy önállóan futtatható játék futtatásakor ez rendszerint azonos a munkamappával, kivéve ha a játék pl. megnyit egy fájlt a fájlválogatót használva. Megjegyzendő, hogy egy játék kipróbálásakor a program és a munkamappa eltérő lesz. Abban az esetben a munkamappa az a hely, ahol a szerkeszthető változat tárolódik, míg a programmappa egy átmeneti könyvtár a próbához.
temp_directory - a játék számára létrehozott ideiglenes mappa. Ide azok az ideiglenes állományok kerülnek, amelyek a játék befejeződésekor törlődnek.

Néha lehetővé kell tenni a játékos számára, hogy parancssori paramétereket adjon a játéknak (pl. csalás vagy különleges módok létrehozása). A következő két függvény ehhez nyújt segítséget:

parameter_count() - a parancssori paraméterek számát adja (ezek közül egyik a program neve).
parameter_string(n) - az n parancssori paraméterekkel tér visssza. Az első paraméter indexe 1. Az utolsó paraméter indexe a parameter_count(). A 0 egy különleges index, mely a futtatható játék fájlneve (tartalmazza az elérési utat).

A környezeti változók kiolvasására használható a következő függvény:

environment_get_variable(nev) - az adott nevű környezeti változó értékét adja vissza szöveg (string) alakban

A játék futásai közötti kis mennyiségű információk tárolására is egy állomány használható, a Windows regisztrációs adatbázisa. Az ilyen bejegyzésnek egy neve és egy értéke van. Szöveg és valós típusú érték használható.

registry_write_string(nev,szov) - bejegyzés készítése nev névvel és szov szöveg típusú értékkel.
registry_write_real(nev,x) - bejegyzés készítése nev névvel és x valós típusú értékkel.
registry_read_string(nev) - visszatér az adott névhez tartozó szöveggel (a névnek léteznie kell, különben egy üres szöveget ad).
registry_read_real(nev) - visszatér az adott névhez tartozó valós értékkel (a névnek léteznie kell, különben a 0 értéket adja).
registry_exists(nev) - létezik-e az adott név.

Valójában a regisztrációs adatbázisban levő értékek kulcsokba vannak csoportosítva, amik tkp. mappák (ha a Start/Futtatásba beírjuk a regedit szót, megtekinthetjük ezeket. Egyébként a regedit.exe a Windows mappájában található). Az iménti függvények a játék számára létrehozott kulcsokban levő értékekkel dolgoznak. A játék információk szerzésére is használhatja arról a rendszerről, amelyen fut. Nemcsak a játékéból, hanem más kulcsokból is lehet adatokat olvasni. Ezek átírása is lehetséges, de ezzel vigyázni kell, emiatt KÖNNYEN ÖSSZEOMOLHAT A RENDSZER. (Az írás védett - secure - módban nem használható.)

A következő függvények alapesetben a HKEY_CURRENT_USER csoportban dolgoznak, de a gyökércsoport (root group) is megváltoztatható.

Például az átmeneti (temp) mappa megtalálására a következő utasítás használható:

path = registry_read_string_ext('/Environment','TEMP');

registry_write_string_ext(kulcs,nev,szov) - bejegyzés készítése az adott regisztrációs kulcsba nev névvel és szov szöveg típusú értékkel.
registry_write_real_ext(kulcs,nev,x) - bejegyzés készítése az adott regisztrációs kulcsba nev névvel és x valós típusú értékkel.
registry_read_string_ext(kulcs,nev) - a jelzett kulcsban adott névvel levő szöveget adja (a névnek léteznie kell, különben egy üres szöveget ad).
registry_read_real_ext(kulcs,nev) - a jelzett kulcsban adott névvel levő valós értéket adja (a névnek léteznie kell, különben a 0 érték tér vissza).
registry_exists_ext(kulcs,nev) - létezik-e az adott név az adott kulcsban.
registry_set_root(gyoker) - a gyökér beállítása a többi függvény számára. A következő értékek használhatók:

0 = HKEY_CURRENT_USER
1 = HKEY_LOCAL_MACHINE
2 = HKEY_CLASSES_ROOT
3 = HKEY_USERS

Az INI állományok szolgálnak a programok számára bizonyos paraméterek átadására, beállítására. Az INI állományokban bekezdések találhatók, melyek név-érték párokat tartalmaznak, pl.:

[Alak]
Teteje=100
Bal=100
Felirat=A valaha volt legjobb játék
[Játék]
MaxPont=12324


Ez két bekezdést, az Alak és a Játék nevűt tartalmazza. Az elsőben három pár található, melyek közül az első kettő valós, míg a harmadik szöveg típusú.
Az INI állományok könnyen létrehozhatók (egy egyszerű szöveges állomány, melynek az .ini kiterjesztést kell adni) és adataik a következő GM függvényekkel könnyen kiolvashatók és megváltoztathatók:

ini_open(nev) - a nev nevű INI állomány megnyitása. A játék mappájában kell lennie.
ini_close() - az éppen megnyitva levő INI állomány bezárása.
ini_read_string(bekezdes,kulcs,alapert) - a jelzett kulcshoz tartozó szöveg kiolvasása az adott bekezdésből. Ha a kulcs vagy a bekezdés nem létezik, az alapértelmezett érték tér vissza.
ini_read_real(bekezdes,kulcs,alapert) - ugyanaz, mint az előző, csak valós értékkel.
ini_write_string(bekezdes,kulcs,ertek) - a szöveg típusú érték írása a jelzett kulcs számára az adott bekezdésben.
ini_write_real(bekezdes,kulcs,ertek) - ugyanaz, mint az előző, csak valós számmal.
ini_key_exists(bekezdes,kulcs) - létezik-e a jelzett kulcs a jelzett bekezdésben.
ini_section_exists(bekezdes) - létezik-e a megadott bekezdés.
ini_key_delete(bekezdes,kulcs) - a megadott kulcs törlése a megadott bekezdésből.
ini_section_delete(bekezdes) - a megadott bekezdés törlése.

Pl. a fenti adatokkal elkészített .ini állományból (legyen ez az adatok.ini) a Felirat-hoz tartozó szöveget állítsuk be a játék ablakának címsorában látható szövegként, ha nem találja, akkor ne jelenjen meg semmi (egy üres szöveg az alapérték):

ini_open("adatok.ini")
room_caption=ini_read_string("Alak","Felirat","")
ini_close()


Jó tudni, hogy itt nincs különbségtétel kis- és nagybetű között, tehát alak és felirat használata esetén is helyesen működik, valamint a kulcsban és a bekezdésben is szerepelhetnek ékezetes betűk.
Mint azt már tudjuk, az .ini állománynak a játék mappájában kell lennie, ezért az ezt használó játék is el kell, hogy legyen már mentve (ez vonatkozik a következő fejezetben található show_text, show_image, stb. függvényekre is).

A GM lehetővé teszi külső programok futtatását is. Erre két függvény létezik: az execute_program és az execute_shell. Az execute_program elindítja a programot és vár a befejezésére (a játék futását felfüggeszti). Az execute_shell megnyit egy állományt, amelynek társítása meghatározott, ez lehet akár html, Word-állomány, stb. De ez lehet egy program is. A befejezésére viszont nem vár, így a játék futása folytatódik.
execute_program(prog,arg,varakoz) - prog program elindítása arg argumentummal. Varakoz jelzi a befejezésére való várakozást.
execute_shell(prog,arg) - program (vagy állomány) végrahajtása.

Egyik függvény sem működik, ha a játékos védett módban futtatja a játékot. Ez a mód a következő (csak kiolvasható) függvénnyel kérdezhető le:

secure_mode - védett módban fut-e a játék.

A következő állománykezelő függvények a GM 5.2-es változatától kezdve használhatók:

Szöveges állományokba való adatok írására és azok kiolvasására a következő függvények valók:

file_text_open_read(fnev) - a megadott állomány megnyitása olvasásra. A függvény az állomány azonosítójával (id) tér vissza. Egyszerre legfeljebb 32 állomány lehet nyitva. Ne feledjük bezárni őket a velük való munka végeztével.
file_text_open_write(fnev) - a megadott állomány megnyitása hozzáírásra. Létrejön, ha nem létezik.
file_text_open_append(fnev) - a megadott állomány megnyitása a végéhez való adatírás céljából. Létrejön, ha nem létezik.
file_text_close(id) - id jelzésű állomány bezárása.
file_text_write_string(id,szov) - a szov szöveg írása az id állományhoz.
file_text_write_real(id,x) - az x valós érték írása az id állományhoz.
file_text_writeln(id) - "új sor" írásjel írása az id állományhoz.
file_text_read_string(id) - egy szöveg kiolvasása az id állományból. A szöveg az állomány végénél végződik.
file_text_read_real(id) - egy valós érték kiolvasása az id állományból.
file_text_readln(id) - üres sorok kihagyása és kezdés a következő sor elejétől.
file_text_eof(id) - elértük-e az id állomány végét.

Pl. a következő programsor egy tárgy rajzolás eseményében elhelyezve soronként kiírja az autoexec.bat fájl tartalmát:

var fajl,sor;
sor=1
if file_exists("c:\autoexec.bat")

{
fajl=file_text_open_read("c:\autoexec.bat")
while not(file_text_eof(fajl))
//a ciklus az állomány végének eléréséig fut
{
draw_text(1,sor,file_text_read_string(fajl))
file_text_readln(fajl)
//ugrás az állomány következő sorára
sor+=12
//kiírásnál minden sor között 12 képpont a távolság
}
file_text_close(fajl)
}
else draw_text(5,5,"Az állomány nem található.")

(Bár ez így ebben a példában jó, de egy komolyabb programban ajánlott a kiírást egy külön erre a célra létrehozott tárgy rajzolás eseményében végrehajtani - pl. a sorok tömbelemként való átadásával - , hogy a fájlműveletek ne kerüljenek olyan ciklusosan ismétlődő eseménybe, mint a rajzolás.)

A következő függvények az állománynevek megváltoztatására valók. Az aktuális állományon nem használhatók és csak szöveggel hívhatók:

filename_name(fnev) - az fnev állomány neve, kiterjesztéssel, de elérési út nélkül.
filename_path(fnev) - a jelzett állomány elérési útja, az utolsó visszaper-jellel.
filename_dir(fnev) - a jelzett állományt tartalmazó mappák, az utolsó visszaper-jel nélkül.
filename_drive(fnev) - a jelzett állományhoz tartozó meghajtó információ.
filename_ext(fnev) - a jelzett állomány kiterjesztése, az elválasztó ponttal.
filename_change_ext(fnev,ujkit) - visszatér a jelzett állomány nevével és kiterjesztésével, és lecseréli az új kiterjesztésre. Ha az ujkit egy üres szöveg, a kiterjesztés törlődik.

Néha szükség van adatok bináris (kettes számrendszerbeni) állományokból való olvasására. A következő alacsony szintű függvények erre szolgálnak:

file_bin_open(fnev,mod) - az fnev állomány megnyitása. A mod az állománnyal való műveletet jelzi: 0=olvasás, 1=írás, 2=olvasás és írás. A függvény az állomány azonosítójával (id) tér vissza. Egyszerre legfeljebb 32 állomány lehet nyitva. Ne feledjük bezárni őket a velük való munka végeztével.
file_bin_rewrite(id) - az id állomány megnyitása újraírásra, ami a tartalom törlését és az írás kezdését jelenti.
file_bin_close(id) - az id állomány bezárása.
file_bin_size(id) - az id állomány méretét adja (bájtokban).
file_bin_position(id) - az aktuális helyzet (bájtokban; 0 az első) az id állományban.
file_bin_seek(id,hely) - az aktuális hely mozgatása a jelzett helyre.
file_bin_write_byte(id,bajt) - adat egy bajtjának írása az id állományba.
file_bin_read_byte(id) - az adat egy bájtjának kiolvasása id állományból.


A megnyitandó állomány legkényelmesebben a get_open_filename függvénnyel kereshető ki, melynek leírása a következő fejezetben található.

« Előző oldal- - - ^Tartalom^- - - Következő oldal »