« 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 »