IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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 - GameMaker - GML

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

 

Předchozí článek
Naprogramujte arkanoid v GML
Všechny články v sekci
GameMaker - GML
Článek pro vás napsal Martin Bednář (xbedm01)
Avatar
Uživatelské hodnocení:
3 hlasů
Autor se momentálně věnuje nejvíce jazykům PHP,JavaScript,HTML a CSS. Také tvoří hry v Game Makeru.
Aktivity