Pole (Arrays) v GML

Ostatní jazyky GameMaker GML 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:

Pole v GameMakeru

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ženo 170x (9.02 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

  Aktivity (1)

Článek pro vás napsal Martin Bednář (xbedm01)
Avatar
Autor se momentálně věnuje nejvíce jazykům PHP,JavaScript,HTML a CSS. Také tvoří hry v Game Makeru.

Jak se ti líbí článek?
Celkem (3 hlasů) :
2.666672.666672.66667 2.666672.66667


 



 

 

Komentáře
Zobrazit starší komentáře (50)

Avatar
Neaktivní uživatel:

Jistě že má práva, ale podle mě je neetické mazat každý komentář co se mu jen trochu nelíbí, chápu když smaže SPAM, nějaký OT, Warez nebo tak ale mazat něčí názor je podle mě jen maskování skutečnosti, příště si bude sobě dávat plusy...

Odpovědět  +1 15.5.2015 20:18
Neaktivní uživatelský účet
Avatar
Druid
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Druid:

No ale on má právo i na tohle. Jakkoliv neetické se nám to může zdát, registrací zde jsme s tím souhlasili. A vzhledem k tomu jaký portál se mu povedlo postavit si myslím že trochu té arogance si zrovna on dovolit může.

Odpovědět  -1 15.5.2015 20:50
Život je tak trapný bože, jak uprdnutí do soulože.
Avatar
jikolp7
Člen
Avatar
Odpovídá na Druid
jikolp7:

Když jsem se zaregistroval nikde nebyl checkbox "Autor projektu si vyhrazuje právo Vás dle libosti sprostě urážet."

Čáp chce, abychom se tu chovali slušně, buď se tak bude chovat i on, nebo to fungovat nebude.

 
Odpovědět  +1 15.5.2015 21:26
Avatar
Michal Šmahel (ceskyDJ):

Neaktivní uživatel
Ale pokud vím, nikdy nesmazal můj komentář, za což mu jsem velice vděčný.
To, že někdy něco odstraní neznamená, že to dělá jen tak, z nudy.
Chápu, jak to myslíš, ale zase to musíš brát z jiné strany. Povedlo se mu vybudovat tuto unikátní síť (za což mu opravdu gratuluji), tudíž chce, aby nebyla ničím kažena. Proto nějaké komentáře odstraní.
Nedělá to pro své "ego", ale pro ITnetwork, tuto síť, tudíž pro nás všechny.
Někoho občas urazí, ale tak to bohužel v životě je. Musí si říct, že je to pouze komentář a pokračovat ve své cestě dál.

Editováno 15.5.2015 23:58
Odpovědět  -5 15.5.2015 23:56
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Neaktivní uživatel:

No to je vrchol. Jen pro to aby si zachoval důstojnost a respetk. A pak si takhle honí ego. Docela souhlasím s jikolp7.

Autor projektu si vyhrazuje právo Vás dle libosti sprostě urážet.

Pravda ? V žádném případě! Není to ani v podmínkách a pravidlech.

Je mi jasné že mi koment bude smazán, odpovědi pište na 205nd@205nd.tk

PS: Davide, pokud chceš aby se tu chovali slušně, buď se tak budeš chovat i ty, nebo to fungovat prostě nebude.

Editováno 16.5.2015 7:25
Odpovědět  +4 16.5.2015 7:22
Neaktivní uživatelský účet
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Neaktivní uživatel:
Nedělá to pro své "ego", ale pro ITnetwork, tuto síť, tudíž pro nás všechny.

O tobě jsem si myslel že jsi chytrý. Tak naivní...

Odpovědět  -1 16.5.2015 7:23
Neaktivní uživatelský účet
Avatar
LordOfFlies backup (kocourmate:

Dobrý den,

dovolte mi vše vysvětlit.

Zaprvé, píšu z náhradního účtu, jelikož nemohu až do 21.5 komentovat, palcovat a hlavně se veřejně obhájit.

Zadruhé, dovolte mi vysvětlit můj první komentář, problém je na jednu stranu jednoduchý, na druhou se jedná o vyložené faux pas. Ten komentář, který jste četli vypadal v původní podobě tak, jak vypadá teď. Ihned po odeslání, jsem si uvědomil uvědomil, že ten komentář si čtenáři vyloží špatně, protože byl špatně napsán. Jeho zamýšlený význam byl, že několik dalších článků v sekci GM obsahuje podobné chyby. Naprosto nechtěně se v něm objevil globalizační efekt, pouze jsem se špatně vyjádřil. Začal jsem upravovat svůj komentář, nicméně jsem překročil blíže nespecifikovaný editační limit a moje úprava nebyla uznána. Vskutku trapné.
Přijměte prosím moje omluvy.

Zatřetí, takový útok a agresivitu čápky jsem vskutku nečekal. Ve svém komentáři zapomněl dodat, že kromě kvízů a dalšího mám nafejkované "akceptované řešení", umístění v soutěžích (viz můj profil), vědomosti a znalosti. Asi je načase změnit si jméno na LordOfFakes.

Nakonec chci poděkovat všem lidem, kteří se mě zastali, opravdu moc si toho vážím. Vyjádřilo se zde hodně uživatelů, o některých jsem měl lepší mínění. Aspoň vidím, kdo za co stojí. Je dobře, že čápkovi komentáře nemají automaticky +10, jako to bylo na začátku. K tomu co psal ceskyDJ, čápka to vymyslel, za což má můj obdiv, ale na téhle síti vytvořila většinu obsahu komunita.
Pro druida: Když jsem se registroval, nikde v podmínkách nebylo, že si autor projektu vyhrazuje právo na sprosté urážky ostatních členů. Proto nemá právo mě urážet, stejně jako já neurážím ostatní členy sítě. Už jen z počtu lidí co se zde vyjádřilo na mojí obhajobu se dá odvodit, že asi všechny kolem sebe neurážím. ;)
K mé tvorbě: Sepsal jsem už mraky programů a to že je tady neuveřejňuji neznamená, je moje věc. Komunitě pomáhám zejména na GM fóru, částečně působím i v C# sekci.
Jestli nemá čápka GM rád, je to jeho věc. Pokud si myslí, že GML není programovací jazyk, prosím. To jen dokazuje neznalost. To že dokončil soukromou VŠ je obdivuhodné, ale když narážel na moje reference měl brát ohled na můj věk, v 16. na VŠ ještě nejsem.

Přeji hodně zdaru všem, LordOfFlies. :)

 
Odpovědět  +9 16.5.2015 9:00
Avatar
hanpari
Redaktor
Avatar
Odpovídá na LordOfFlies backup (kocourmate
hanpari:

Tvuj komentar byl mozna ostrejsi, ale videl jsem tu mnohem horsi. Navic jsem od sameho zacatku videl dobry umysl, coz neplati u velke casti zdejsich kritik. S moderatory se nema smysl hadat, i kdyz nekdy prestreli. Ono to opravdu nemaji lehke. Ber to jako cennou zivotni lekci. Nekdy proste musi clovek vydrzet i zjevnou nespravedlnost. Takze hlavu vzhuru!

 
Odpovědět  +6 16.5.2015 9:48
Avatar
LordOfFlies backup (kocourmate:

Rád bych nabídl smír a celé bych to uzavřel. Všichni občas děláme chyby. :)

 
Odpovědět  +6 16.5.2015 10:03
Avatar
Odpovídá na Neaktivní uživatel
Michal Šmahel (ceskyDJ):

To já si myslel o všech, kteří tu působí. Když vidím, jaká mršť vyjde z omylem špatně napsaného komentáře, je to strašné.
Možná to opravdu dělá jen pro sebe a svůj dobrý pocit, ale nějak se mně tomu nechce věřit.
Možná nemám pravdu, nevím, Davida jsem osobně ani neviděl ani ho osobně neznám, nemůžu ho proto přesněji hodnotit.

Odpovědět  +3 16.5.2015 11:27
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 60. Zobrazit vše