IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Pole (Arrays) v GML

Array, alebo po slovensky pole, je vlastne taká "množina" premenných, do ktorej sa dajú ukladať rôzne dáta na konkrétne pozície (súradnice).

Základná syntax polí v Game Makeru vyzerá takto:

pole[souradnice]=hodnota;

Teda naprí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

Okrem toho zvláda Game Maker tzv. Dvojrozmerné polia, teda pole, v ktorých môžeme uložiť hodnotu na dve súradnice. Ak by sme si jednoduché jednorozmerné pole predstavili ako priamku, na ktorú ukladáme do rôznych bodov dáta, mohli by sme si dvojrozmerné pole predstaviť ako plochu.

Základná syntax dvojrozmerných polí teda vyzerá takto:

pole[souradnicex,souradnicey]=hodnota;

Na našom príklade:

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 možno ako súradnicu v poli použiť aj premennú, ktorej už bola priradená nejaká číselná hodnota. Ako súradnice môže používať len celé alebo desatinné kladné číslo, premenná, ktorá má jeho hodnotu, alebo početnej výraz, ktorého výsledkom je celé alebo desatinné kladné číslo!

Môžeme teda napísať:

a=2;
b=8;
enemies[a,b]=slenderman;

Posledný odsek teórie, potom už sa vrhneme na použitie Arrays v praxi!

Hodnota premenných enemies a enemies [] z minulého príkladu: V Game Makeru platí, že:

enemies=enemies[0]=enemies[]
enemies[0]=enemies=enemies[]
enemies[]=enemies=enemies[0]

Teda, že enemies, enemies [] a enemies [0] sú jedna a tá istá premenná.

Game Maker nepodporuje troj- a viacrozmerné polia!

Použitie polí v praxi

Teraz tá zábavnejšia časť :)

Povedzme, že pre začiatok chceme vytvoriť diagonálne rad čísel od nuly do desať, teda aby to vo výsledku vyzeralo asi takto:

Pole v game maker - Game maker - GML

Ako prvý si vytvoríme nový projekt v Game Makeru. Potom vytvoríme ľubovoľný objekt, napr. Object1

Do jeho Create eventu napíšeme nasledujúci kód:

for (a=0; a<=10; a+=1)
{
    b[a]=a;
}

Rozbor kódu:

Použili sme cyklus for (ten snáď všetci poznáte) pre desaťnásobné zopakovanie zadaného výrazu a zvyšovanie premenné a.

Ďalej sme do poľa b na súradnici a uložili hodnotu a. Bez použitia cyklu for by to teda vyzeralo 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 rovnakého objektu, do eventu Draw napíšeme nasledujúci kód:

for (i=0; i<=10; i+=1)
{
    draw_text(30*i,30*i,b[i]);
}

Rozbor kódu:

Zase sme použili for *, tentoraz však k vypísanie čísla, ktoré je uložené v poli b na pozíciu i do roomu na súradnice ** 30 * i, 30 * i

Bez fóre by to teda bolo:

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]);

Teraz vytvoríme herné room, vložíme do neho náš objekt, a je hotovo!

Vyhľadávania extrémov (minima a maxima) v poli pomocou Game Makeru

Pozor! Zložitejšie operácie, medzi ktoré patrí vyhľadávanie extrémov v poli, sa neodporúčajú vykonávať v GML! Pokiaľ si došiel až sem, zváž použitia moderných jazykov, ako je napríklad C # alebo Java.

Asi si hovoríš, že uhlopriečna rad čísel by sa dala urobiť oveľa jednoduchšie, že to pole je tam zbytočne. Máš pravdu, Aj napriek tomu tu však uvádzam nedokonalý algoritmus, ktorý v číselnom poli nájde najmenší a najväčší prvok.

Nájdenie 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

Samozrejme musí existovať poľa a a musí mať minimálne toľko prvkov tesne za sebou začínajúcich na a [0], koľkokrát opakujeme for. Zvyšok je snáď jasný.

Nájdenie 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

Samozrejme musí existovať poľa a a musí mať minimálne toľko prvkov tesne za sebou začínajúcich na a [0], koľkokrát opakujeme for. Zvyšok je snáď jasný.

Ak ti je niečo nejasné, napíš to do komentárov!


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 175x (9.02 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Predchádzajúci článok
Naprogramujte arkanoid v GML
Všetky články v sekcii
Game maker - GML
Článok pre vás napísal Martin Bednář (xbedm01)
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se momentálně věnuje nejvíce jazykům PHP,JavaScript,HTML a CSS. Také tvoří hry v Game Makeru.
Aktivity