Pole (Arrays) v GML
Array, neboli česky pole, je vlastně taková "množina" proměnných, do které se dají ukládat různá data na konkrétní pozice (souřadnice).
Základní syntaxe polí v Game Makeru vypadá takto:
pole[souradnice]=hodnota;
Tedy například:
enemies[1]="dragon"; //v poli enemies se na první umístění uložil string "dragon" enemies[2]=zombie; //v poli enemies se na souřadnici 2(druhé umístění) uložila proměnná zombie
Kromě toho zvládá Game Maker tzv. dvourozměrná pole, tedy pole, v nichž můžeme uložit hodnotu na dvě souřadnice. Pokud bychom si jednoduché jednorozměrné pole představili jako přímku, na kterou ukládáme do různých bodů data, mohli bychom si dvojrozměrné pole představit jako plochu.
Základní syntaxe dvourozměrných polí tedy vypadá takto:
pole[souradnicex,souradnicey]=hodnota;
Na našem příkladu:
enemies[2,8]=slenderman; //v poli enemies se na souřadnice 2,8 uložila proměnná slenderman (tou může být například objekt slenderman) enemies[7,150]="sdraco"; //v poli enemies se na souřadnice 7,150 uložil string "sdraco"
V Game Makeru lze jako souřadnici v poli použít i proměnnou, které již byla přiřazena nějaká číselná hodnota. Jako souřadnice smí být použito pouze celé nebo desetinné kladné číslo, proměnná, která má jeho hodnotu, nebo početní výraz, jehož výsledkem je celé nebo desetinné kladné číslo!
Můžeme tedy napsat:
a=2; b=8; enemies[a,b]=slenderman;
Poslední odstavec teorie, pak už se vrhneme na použití arrays v praxi!
Hodnota proměnných enemies a enemies[] z minulého příkladu: V Game Makeru platí, že:
enemies=enemies[0]=enemies[] enemies[0]=enemies=enemies[] enemies[]=enemies=enemies[0]
Tedy, že enemies, enemies[] a enemies[0] jsou jedna a tatáž proměnná.
Game Maker nepodporuje troj- a vícerozměrná pole!
Použití polí v praxi
Teď ta zábavnější část
Řekněme, že pro začátek chceme vytvořit úhlopříčnou řadu čísel od nuly do deseti, tedy aby to ve výsledku vypadalo asi takhle:

Jako první si vytvoříme nový projekt v Game Makeru. Poté vytvoříme libovolný objekt, např. object1
Do jeho Create eventu napíšeme následující kód:
for (a=0; a<=10; a+=1) { b[a]=a; }
Rozbor kódu:
Použili jsme cyklus for (ten snad všichni znáte) pro desetinásobné zopakování zadaného výrazu a zvyšování proměnné a.
Dále jsme do pole b na souřadnici a uložili hodnotu a. Bez použití cyklu for by to tedy vypadalo takto:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; b[5]=5; b[6]=6; b[7]=7; b[8]=8; b[9]=9; b[10]=10;
Do stejného objektu, do eventu Draw napíšeme následující kód:
for (i=0; i<=10; i+=1) { draw_text(30*i,30*i,b[i]); }
Rozbor kódu:
Zase jsme použili for*, tentokrát ovšem k vypsání čísla, které je uloženo v poli b na pozici i do roomu na souřadnice **30*i , 30*i
Bez foru by to tedy bylo:
draw_text(30*1,30*1,b[1]); draw_text(30*2,30*2,b[2]); draw_text(30*3,30*3,b[3]); draw_text(30*4,30*4,b[4]); draw_text(30*5,30*5,b[5]); draw_text(30*6,30*6,b[6]); draw_text(30*7,30*7,b[7]); draw_text(30*8,30*8,b[8]); draw_text(30*9,30*9,b[9]); draw_text(30*10,30*10,b[10]);
Nyní vytvoříme herní room, vložíme do něj náš objekt, a je hotovo!
Vyhledávání extrémů (minima a maxima) v poli pomocí Game Makeru
Pozor! Složitější operace, mezi které patří vyhledávání extrémů v poli, se nedoporučují provádět v GML! Pokud jsi došel až sem, zvaž použití moderních jazyků, jako je například C# nebo Java.
Asi si říkáš, že úhlopříčná řada čísel by se dala udělat mnohem jednodušeji, že to pole je tam zbytečně. Máš pravdu, I přesto tu však uvádím nedokonalý algoritmus, který v číselném poli nalezne nejmenší a největší prvek.
Nalezení minima
if a[0] <= a[1] { nejmensi=a[0]; } else nejmensi=a[1]; for (i=1; i <= 10; i+=1) { if a[i] <= nejmensi { nejmensi=a[i]; } }
Rozbor kódu
Samozřejmě musí existovat pole a a musí mít minimálně tolik prvků těsně za sebou začínajících na a[0], kolikrát opakujeme for. Zbytek je snad jasný.
Nalezení maxima
if a[0]>=a[1] { nejvetsi=a[0]; } else nejvetsi=a[1]; for (i=1; i<=10; i+=1) { if a[i]>=nejvetsi { nejvetsi=a[i]; } }
Rozbor kódu
Samozřejmě musí existovat pole a a musí mít minimálně tolik prvků těsně za sebou začínajících na a[0], kolikrát opakujeme for. Zbytek je snad jasný.
Pokud ti je něco nejasné, napiš to do komentářů!
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 175x (9.02 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker