5. listopadu 2015

Vícerozměrná pole v Game Makeru

Game Maker v nynější verzi (1.4.1629) nepodporuje větší počet rozměrů než dva. Napsal jsem si proto základní skripty umožňující s vícerozměrnými poli pracovat. >DOWNLOAD SADY SKRIPTŮ<

///array_create(array,value,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12);
tento skript naplní pole ( maximálně 12 rozměrů ) hodnotou value
array je název pole a to je potřeba inicializovat,
např.:
 A[0]=0;  //inicializace
array_create(A,'@',10,10); //pole A se naplní 10 krát 10 zavináči

Pozn: ve skutečnosti nejde o vytvoření vícerozměrného pole, ale o jeho převod na jednorozměrné pole. Čili například u dvourozměrů leží obsah jednotlivých řádků za sebou. V indexu [0] je uložen string obsahující informaci o počtu rozměrů a jejich velikosti. Jde o čísla převedená na string, spojená do jednoho a odsazená čárkou. Například u čtyřrozměrného pole 8x8x8x8 tam bude '8,8,8,8'.

///array_get_dimensions(array);
když je potřeba zjistit počet rozměrů uložených do pole vzniklého pomocí array_create, stačí zavolat tento skript a on vrátí potřebnou hodnotu jako číslo.

///array_dimension_size(array,dimension 1..N);
tento skript vrací velikost pole v daném rozměru.
Pokud tedy například máme pětirozměrné pole A o velikostech 3x2x5x1x8, pak:
array_dimension_size(A,5) == 8

///array_whereis(array,D1,D2,D3...);
pokud je někdy potřeba zjistit, kde ve skutečném jednorozměrném poli leží nějaký index, skript array_whereis to dokáže zjistit. Je dobré si uvědomit, že array_whereis(array,0,0,0...samé nuly) dává vždy 1, protože na nultém indexu je uložena informace o velikosti pole. Pokud ovšem používáme následující skripty pro čtení a zápis, není skript array_whereis vůbec potřeba znát.

///array_read(array,D1,D2,D3...);
tento skript jednoduše vrací hodnotu z pole podle daných indexů. Pokud je index mimo pole, objeví se error hláška "Array out of bounds." Indexy startují od nuly.

///array_write(array,value,D1,D2,D3...);
tento skript zapisuje hodnotu value do pole na patřičné umístění. Pokud je index mimo pole, objeví se error hláška "Array out of bounds." Indexy startují od nuly. Skript vrací minulou hodnotu, která byla v poli před přepsáním. Tato vlastnost se hodí například při výměně obsahů dvou míst v poli.

Příklad použití včetně zdrojového kódu si lze stáhnout zde: >DOWNLOAD UKÁZKY<
Jde o třírozměrné pole 5x5x5 s uloženými barvami. V poli se lze pohybovat klávesami a barvy měnit.





Žádné komentáře:

Okomentovat

Komentář vypovídá většinou o autorovi víc, než by byl jinak ochoten sdělit.