« Előző oldal- - - ^Tartalom^- - - Következő oldal »
ADATSZERKEZETEK: (GM
5.2-től)
A játékokban gyakran szükség van információk tárolására,
például lista azokról a tárgyakról, amiket egy szereplő
hordoz, vagy azokról a helyekről, amiket még meg kell
látogatni. Ezekhez a tömbök használhatók. De ha
összetettebb műveletekre van szükség, például adatok
rendszerezésére vagy egy adott eszköz keresésére, akkor
nagyméretű GML kódokat kell írni, melyek
végrehajtása lassú lehet.
Ezt elkerülendő a GM számos beépített
adatszerkezetet tartalmaz. Jelenleg hat eltérő típusú
adatszerkezet létezik: vermek, sorok, listák, térképek,
elsődleges sorok és (GM 6.1-től) rácsok.
Minden adatszerkezet globálisan működik, vagyis mindenhonnan
elérhető a programból. Létrehozhatunk egy adatszerkezetet egy
függvénnyel, mely visszatér annak azonosítójával
(id-jével), amit felhasználva műveleteket lehet végrehajtani
az adatszerkezeten. Minden szerkezet tartalmazhat szövegeket és
valós számokat.
Értékek összehasonlításakor, például egy térképben való
kereséskor vagy egy lista rendezésekor, a GM-nek
el kell döntenie, hogy mikor egyenlő két érték. Szövegek
és egész számok esetén ez világos, de valós számok
esetében, a lefelé kerekítési hibáknak köszönhetően, az
egyenlők könnyen nem egyenlővé válnak. Például (5/3)*3
eredménye nem lesz egyenlő 5-tel. Ennek elkerülésére az ún.
pontosság használatos. Ha két szám között az eltérés
kisebb, mint ez a pontosság, akkor egyenlőnek vannak tekintve.
Alapértelmezés szerint pontosságként a 0.0000001 érték van
használva. Ez a következő függvénnyel megváltoztatható:
ds_set_precision(pontossag) - az
összehasonlítások számára használt pontosság
beállítása.
Ez a pontosság minden adatszerkezetben használt, de a GML
többi összehasonlító műveleteiben nem!
- Vermek:
A verem adatszerkezetet másképpen LIFO (Last-In First-Out;
Első Be Utolsó Ki) szerkezetnek is nevezik. Az értékeket bele
lehet rakni, és ki lehet venni belőle. Az utolsóként
behelyezett értéket lehet elsőként kivenni. (Úgy képzeljük
el, mint egy földbe ásott vermet: az elsőnek bedobott érték
kerül az aljára, a többi pedig rá.) A vermek gyakran
használatosak megszakítások kezelésére, vagy rekurzív
(önmagát hívó) függvények esetén.
A következő függvények léteznek a vermek számára:
ds_stack_create() - egy új verem létrehozása.
A függvény egy egész számot ad a verem azonosítójaként,
mely az összes többi függvény számára a verem elérését
teszi lehetővé. Több verem is létrehozható.
ds_stack_destroy(id) - az adott jelű verem
megsemmisítése, felszabadítva ezzel az általa használt
memóriát. Ne felejtsük ezt hívni, mikor elkészültünk a
szerkezettel.
ds_stack_clear(id) - az adott jelű verem
adatait törli, de a vermet nem semmisíti meg.
ds_stack_copy(id,forras) - a veremforrás másolása az
adott id-jű verembe. GM 7-től.
ds_stack_size(id) - a veremben tárolt értékek
mennyisége.
ds_stack_empty(id) - üres-e a verem. Ugyanaz,
mintha azt ellenőriznénk, hogy a mérete 0 e.
ds_stack_push(id,ertek) - az érték
elhelyezése a verembe.
ds_stack_pop(id) - a verem tetején lévő
értéket adja, és ki is veszi.
ds_stack_top(id) - a verem tetején lévő
értéket adja, de nem veszi ki.
ds_stack_write(id) - az adatszerkezetet egy szöveggé
alakítja és visszatér ezzel a sztringgel, amit pl. el lehet
menteni egy fájlba. Ez egy egyszerű mechanizmusról gondoskodik
adatszerkezetek mentésére. GM 7-től.
ds_stack_read(id,szoveg) - beolvassa az adatszerkezetet
az adott szövegből (ami az előző függvény hívásával létrejött).
GM 7-től.
- Sorok:
A sor valamelyest hasonlít a veremhez, de ez FIFO (First-In
First Out; Első Be Első Ki) alapon működik. Az elsőnek
berakott értéket lehet elsőként kivenni. Olyasmi, mint a sor
a boltban. A sorban elől álló személyt szolgálják ki
először. (Elképzelhetjük úgy is, mint egy oldalára
fektetett csövet: az elsőnek berakott adatot tudjuk a másik
végén kivenni először.)
A következő függvények léteznek:
ds_queue_create() - egy új sor létrehozása. A
függvény egy egész számot ad a sor azonosítójaként, mely
az összes többi függvény számára a sor elérését teszi
lehetővé. Több sor is létrehozható.
ds_queue_destroy(id) - az adott jelű sor
megsemmisítése, felszabadítva ezzel az általa használt
memóriát. Ne felejtsük ezt hívni, mikor elkészültünk a
szerkezettel.
ds_queue_clear(id) - az adott jelű sor adatait
törli, de a sort nem semmisíti meg.
ds_queue_copy(id,forras) - a sorforrás másolása az
adott id-jű sorba. GM 7-től.
ds_queue_size(id) - a sorban tárolt értékek
mennyisége.
ds_queue_empty(id) - üres-e a sor. Ugyanaz,
mintha azt ellenőriznénk, hogy a mérete 0 e.
ds_queue_enqueue(id,ertek) - egy érték
hozzáadása a sorhoz.
ds_queue_dequeue(id) - visszatér azzal az
értékkel, amely a leghosszabb ideje van a sorban, és kiveszi
azt.
ds_queue_head(id) - visszatér a sor végénél
található értékkel, vagyis azzal, amelyik a legrégebben a
sorban van, de nem veszi ki.
ds_queue_tail(id) - visszatér a sor elején
található értékkel, vagyis azzal, amelyik legutóbb került
bele, de nem veszi ki.
ds_queue_write(id) - az adatszerkezetet egy szöveggé
alakítja és visszatér ezzel a sztringgel, amit pl. el lehet
menteni egy fájlba. Ez egy egyszerű mechanizmusról gondoskodik
adatszerkezetek mentésére. GM 7-től.
ds_queue_read(id,szoveg) - beolvassa az adatszerkezetet
az adott szövegből (ami az előző függvény hívásával létrejött).
GM 7-től.
- Listák:
Egy listában sajátos rend szerint lehet értékeket tárolni.
Lehet a végénél hozzáadni értékeket, vagy kivenni
valahonnan a közepéről. Index használatával az értékeket
meg lehet címezni. Növelő vagy csökkentő utasítással az
elemeket rendezni is lehet. Egyszerű tömböket használ, de
mégis gyorsabb a tömbök alkalmazásánál.
A következő függvények használhatók:
ds_list_create() - egy új lista létrehozása.
A függvény egy egész számot ad a lista azonosítójaként,
mely az összes többi függvény számára a lista elérését
teszi lehetővé.
ds_list_destroy(id) - az adott jelű lista
megsemmisítése, felszabadítva ezzel az általa használt
memóriát. Ne felejtsük ezt hívni, mikor elkészültünk a
szerkezettel.
ds_list_clear(id) - az adott jelű lista adatait
törli, de a listát nem semmisíti meg.
ds_list_copy(id,forras) - a listaforrás másolása az
adott id-jű listába. GM 7-től.
ds_list_size(id) - a listában tárolt értékek
mennyisége.
ds_list_empty(id) - üres-e a lista. Ugyanaz,
mintha azt ellenőriznénk, hogy a mérete 0 e.
ds_list_add(id,ertek) - érték hozzáadása a
lista végénél.
ds_list_insert(id,hely,ertek) - érték
beillesztése a lista hely helyére. Az első
hely a 0, az utolsó a méret-1.
ds_list_replace(id,hely,ertek) - a hely
helyen lévő érték felcserélése az új értékkel.
ds_list_delete(id,hely) - a hely
helyen lévő érték törlése. (A 0. az első elem helye.)
ds_list_find_index(id,ertek) - a jelzett érték
helyének megkeresése. Ha az érték nincs a listában, akkor a
függvény visszatérési értéke -1.
ds_list_find_value(id,hely) - a lista jelzett
helyén lévő érték.
ds_list_sort(id,novekvo) - az értékek
rendezése a listában. Ha novekvo igaz, akkor
növekvő sorrendbe rendeződnek az értékek, különben
csökkenőbe.
ds_list_shuffle(id) - az értékek keverése a listában, hogy
véletlen sorrendbe kerüljenek. GM 7-től.
ds_list_write(id) - az adatszerkezetet egy szöveggé
alakítja és visszatér ezzel a sztringgel, amit pl. el lehet
menteni egy fájlba. Ez egy egyszerű mechanizmusról gondoskodik
adatszerkezetek mentésére. GM 7-től.
ds_list_read(id,szoveg) - beolvassa az adatszerkezetet
az adott szövegből (ami az előző függvény hívásával létrejött).
GM 7-től.
- Térképek:
Néha szükséges egy kulcsból és egy értékből álló párok
tárolása. A térképek tartalmazhatnak ilyen párokat, kulcsok
szerint rendezve. Lehet újabb párokat megadni, és kikeresni a
kulcsokhoz tartozó értékeket. Mivel a kulcsok rendezettek,
könnyedén megtalálható az előző és a következő kulcs.
Néha jól jön, ha egy térkép csak kulcsokat tárol, a
hozzájuk tartozó értékek nélkül. Ezesetben értékként a
0-t kell megadni.
A következő függvények használhatók:
ds_map_create() - egy új térkép
létrehozása. A függvény egy egész számot ad a térkép
azonosítójaként, mely az összes többi függvény számára a
térkép elérését teszi lehetővé.
ds_map_destroy(id) - az adott jelű térkép
megsemmisítése, felszabadítva ezzel az általa használt
memóriát. Ne felejtsük ezt hívni, mikor elkészültünk a
szerkezettel.
ds_map_clear(id) - az adott jelű térkép
adatait törli, de a térképet nem semmisíti meg.
ds_map_copy(id,forras) - a térképforrás másolása az
adott id-jű térképbe. GM 7-től.
ds_map_size(id) - a térképben tárolt
kulcs-érték párok száma.
ds_map_empty(id) - üres-e a térkép. Ugyanaz,
mintha azt ellenőriznénk, hogy a mérete 0 e.
ds_map_add(id,kulcs,ertek) - kulcs-érték pár
hozzáadása a térképhez.
ds_map_replace(id,kulcs,ertek) - a kulcshoz
tartozó értéket cseréli fel az új értékkel.
ds_map_delete(id,kulcs) - a kulcs és a hozzá
tartozó érték törlése a térképből. (Ha több bejegyzés
létezik ugyanazzal a kulccsal, akkor csak egyet távolít el
közülük.)
ds_map_exists(id,kulcs) - létezik-e a kulcs a
térképben.
ds_map_find_value(id,kulcs) - a kulcshoz
tartozó értékkel tér vissza.
ds_map_find_previous(id,kulcs) - a térképben
található legnagyobb kulccsal tér vissza, ami kisebb a
függvény paraméterében megadottnál. (A kulcs tér vissza,
és nem az érték. Az érték megtalálására az előző
függvény használható.)
ds_map_find_next(id,kulcs) - a legkisebb kulcs,
ami még nagyobb a megadottnál.
ds_map_find_first(id) - az id
térkép legkisebb kulcsát adja.
ds_map_find_last(id) - az id
térkép legnagyobb kulcsát adja.
ds_map_write(id) - az adatszerkezetet egy szöveggé
alakítja és visszatér ezzel a sztringgel, amit pl. el lehet
menteni egy fájlba. Ez egy egyszerű mechanizmusról gondoskodik
adatszerkezetek mentésére. GM 7-től.
ds_map_read(id,szoveg) - beolvassa az adatszerkezetet
az adott szövegből (ami az előző függvény hívásával létrejött).
GM 7-től.
- Elsődleges
sorok:
Egy elsődleges sorban tárolt értékek mindegyikének
elsőbbsége van. Az értékek gyorsan megtalálhatók a
legkisebb és legnagyobb elsőbbséggel.
A következő függvények léteznek:
ds_priority_create() - egy új elsődleges sor
létrehozása. A függvény egy egész számot ad az elsődleges
sor azonosítójaként, mely az összes többi függvény
számára az elérését teszi lehetővé.
ds_priority_destroy(id) - az adott jelű
elsődleges sor megsemmisítése, felszabadítva ezzel az általa
használt memóriát. Ne felejtsük ezt hívni, mikor
elkészültünk a szerkezettel.
ds_priority_clear(id) - az adott jelű sor
adatait törli, de a sort nem semmisíti meg.
ds_priority_copy(id,forras) - az elsődleges sorforrás
másolása az adott id-jű elsődleges sorba. GM 7-től.
ds_priority_size(id) - az id
azonosítójú elsődleges sorban tárolt értékek száma.
ds_priority_empty(id) - üres-e a sor. Ugyanaz,
mintha azt ellenőriznénk, hogy a mérete 0 e.
ds_priority_add(id,ertek,els) - ertek
érték adása els elsőbbséggel az id
sorhoz.
ds_priority_change_priority(id,ertek,els) - az
adott érték elsőbbségének lecserélése az újra.
ds_priority_find_priority(id,ertek) - az adott
érték elsőbbségével tér vissza.
ds_priority_delete_value(id,ertek) - az adott
érték törlése (elsőbbségével együtt).
ds_priority_delete_min(id) - a legkisebb
elsőbbségű értéket adja, és törli a sorból.
ds_priority_find_min(id) - a legkisebb
elsőbbségű elemet adja, de nem törli a sorból.
ds_priority_delete_max(id) - a legnagyobb
elsőbbségű értéket adja, és törli a sorból.
ds_priority_find_max(id) - a legnagyobb
elsőbbségű elemet adja, de nem törli a sorból.
ds_priority_write(id) - az adatszerkezetet egy szöveggé
alakítja és visszatér ezzel a sztringgel, amit pl. el lehet
menteni egy fájlba. Ez egy egyszerű mechanizmusról gondoskodik
adatszerkezetek mentésére. GM 7-től.
ds_priority_read(id,szoveg) - beolvassa az adatszerkezetet
az adott szövegből (ami az előző függvény hívásával létrejött).
GM 7-től.
- Rácsok: (GM 6.1-től)
Egy rács egy egyszerű kétdimenziós tömb, aminek van egy
egészszámú szélessége és magassága. A szerkezet lehetővé
teszi a cellaértékek elhelyezését és kivételét a rácsban
az indexének megadásával (mely 0-val kezdődik x és y
irányban). De az egyes területekben is beállíthatók az
értékek: hozzáadhatók és kinyerhető az összeg, a
legnagyobb, a legkisebb és az átlagérték egy egész
területről. A szerkezet hasznos pl. egy játékmező
képviselésére. Bár mindegyik funkció megvalósítható
kétdimenziós tömbök használatával, a területeken való
műveletvégzés valamivel gyorsabb. A következő függvények
léteznek:
ds_grid_create(sz,m) - egy új rács
létrehozása az adott szélességgel és magassággal.
A függvény egy egész számot ad az azonosítójaként, mely az
összes többi függvény számára az elérését teszi
lehetővé.
ds_grid_destroy(id) - az adott jelű elsődleges
sor megsemmisítése, felszabadítva ezzel az általa használt
memóriát. Ne felejtsük ezt hívni, mikor elkészültünk a
szerkezettel.
ds_grid_copy(id,forras) - a rácsforrás másolása az adott
id-jű rácsba. GM 7-től.
ds_grid_resize(id,sz,m) - a rács
átméretezése az új szélességre és magasságra.
A létező cellák megtartják az eredeti értéküket.
ds_grid_width(id) - a jelölt azonosítójú
rács szélességét adja.
ds_grid_height(id) - a jelölt azonosítójú
rács magasságát adja.
ds_grid_clear(id,ertek) - az adott
azonosítójú rácsot törli az adott értékre.
ds_grid_set(id,x,y,ertek) - az adott
azonosítójú rácsban a jelölt cella értékét a megadott
értékre állítja.
ds_grid_add(id,x,y,ertek) - az adott
azonosítójú rácsban a jelölt cella értékéhez hozzáadja a
megadott értéket. Szövegek esetén ez megfelel az
összefűzésnek.
ds_grid_multiply(id,x,y,ertek) - az adott
azonosítójú rácsban a jelölt cella értékének szorzása.
Csak számoknál érvényes.
ds_grid_set_region(id,x1,y1,x2,y2,ertek) - az
adott azonosítójú rács meghatározott területének összes
celláját a jelölt értékre állítja.
ds_grid_add_region(id,x1,y1,x2,y2,ertek) - az
adott azonosítójú rács meghatározott területének összes
cellájához hozzáadja a megadott értéket. Szövegek esetén
ez megfelel az összefűzésnek.
ds_grid_multiply_region(id,x1,y1,x2,y2,ertek) -
az adott rács területe celláinak szorzása. Csak számoknál
érvényes.
ds_grid_set_disk(id,xm,ym,r,ertek) - az összes
cella beállítása az xm,ym
középpontú és r sugarú területen
("lemezben").
ds_grid_add_disk(id,xm,ym,r,ertek) - az érték
hozzáadása az xm, ym
középpontú és r sugarú terület celláihoz.
ds_grid_multiply_disk(id,xm,ym,r,ertek) - az xm,ym
középpontú és r sugarú terület celláinak
szorzása.
ds_grid_set_grid_region(id,forras,x1,y1,x2,y2,xhely,yhely) -
a rácsterület cellái tartalmának másolása az id rácsba.
Xhely és yhely jelzi a helyet, ahová a területet
el kell helyezni a rácsban. (Használható még értékek másolására
egyik helyről a másikra egy rácsban.) GM 7-től.
ds_grid_add_grid_region(id,forras,x1,y1,x2,y2,xhely,yhely) -
a rácsterület cellái tartalmának hozzáadása az id rácshoz.
Xhely és yhely jelzi a helyet, ahová a területet
hozzá kell adni a rácshoz. (Az id és a forras azonosak is lehetnek.)
GM 7-től.
ds_grid_multiply_grid_region(id,forras,x1,y1,x2,y2,xhely,yhely) -
a rácsterület cellái tartalmának megszorzása az id rácshoz.
Xhely és yhely jelzik a helyet, ahol a területet meg kell
szorozni a rácsban. (Az id és a forras azonosak is lehetnek.)
Csak számok esetén érvényes. GM 7-től.
ds_grid_get(id,x,y) - az adott azonosítójú
rács adott cellájának értékét adja.
ds_grid_get_sum(id,x1,y1,x2,y2) - az adott
azonosítójú rács meghatározott területe cellaértékeinek
összegét adja. Csak akkor működik, ha a cellák számokat
tartalmaznak.
ds_grid_get_max(id,x1,y1,x2,y2) - az adott
azonosítójú rács meghatározott területe cellaértékeinek
maximumát adja. Csak akkor működik, ha a cellák számokat
tartalmaznak.
ds_grid_get_min(id,x1,y1,x2,y2) - az adott
azonosítójú rács meghatározott területe cellaértékeinek
minimumát adja. Csak akkor működik, ha a cellák számokat
tartalmaznak.
ds_grid_get_mean(id,x1,y1,x2,y2) - az adott
azonosítójú rács meghatározott területe cellaértékeinek
átlagát adja. Csak akkor működik, ha a cellák számokat
tartalmaznak.
ds_grid_get_disk_sum(id,xm,ym,r) - az adott
terület cellaértékeinek összegét adja.
ds_grid_get_disk_min(id,xm,ym,r) - az adott
terület cellaértékeinek minimumát adja.
ds_grid_get_disk_max(id,xm,ym,r) - az adott
terület cellaértékeinek maximumát adja.
ds_grid_get_disk_mean(id,xm,ym,r) - az adott
terület cellaértékeinek átlagát adja.
ds_grid_value_exists(id,x1,y1,x2,y2,ertek) -
visszaadja, hogy az érték megvan-e valahol a területen.
ds_grid_value_x(id,x1,y1,x2,y2,ertek) -
visszaadja annak a cellának az x-koordinátáját, amelyben az
érték megtalálható az adott területen.
ds_grid_value_y(id,x1,y1,x2,y2,ertek) -
visszaadja annak a cellának az y-koordinátáját, amelyben az
érték megtalálható az adott területen.
ds_grid_value_disk_exists(id,xm,ym,r,ertek) -
visszaadja, hogy az érték megvan-e valahol a területen.
ds_grid_value_disk_x(id,xm,ym,r,ertek) -
visszaadja annak a cellának az x-koordinátáját, amelyben az
érték megtalálható az adott területen.
ds_grid_value_disk_y(id,xm,ym,r,ertek) -
visszaadja annak a cellának az y-koordinátáját, amelyben az
érték megtalálható az adott területen.
ds_grid_shuffle(id) - az értékek megkeverése a rácsban,
hogy véletlen sorrendűek legyenek. GM 7-től.
ds_grid_write(id) - az adatszerkezetet egy szöveggé
alakítja és visszatér ezzel a sztringgel, amit pl. el lehet
menteni egy fájlba. Ez egy egyszerű mechanizmusról gondoskodik
adatszerkezetek mentésére. GM 7-től.
ds_grid_read(id,szoveg) - beolvassa az adatszerkezetet
az adott szövegből (ami az előző függvény hívásával létrejött).
GM 7-től.
« Előző oldal- - - ^Tartalom^- - - Következő oldal »