NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Porovnání čísel

V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
David Šercl
Člen
Avatar
David Šercl:16.5.2016 16:52

Ahoj,
poradil by mi někdo ohledně porovnání čísel, vím jak to udělat zdlouhavým postupem, ale třeba zná někdo nějakou funkci, která by to zjednodušila. Zatím to mám jen ve fázi pokusů, tak že jde o to, že mám momentálně 5 lodí, které sbírají zkušenosti tím, že střílí neutrální a patří, ke stejné frakci. Každá z těch lodí má proměnou, která reprezentuje zkušenosti určité lodě (global.aresexpr01, global.aresex­pr02...atd). Existuje nějaká funkce, která by mi porovnala ty čísla a vytáhla mi 1-nejvyšší, 2- nejvyšší, 3-nejvyšší....atd.

Samozřejmě to jde udělat zdlouhavým procesem...tady je ukázka pro představu(script uvnitř té lodě):
Buď tímto pro nejvyšší číslo:
rankmax = max(global.are­sexpr01,global­.aresexpr02,glo­bal.aresexpr03,glo­bal.aresexpr04);
if rankmax = global.aresexpr01{
rank = 1;
}
if rankmax = global.aresexpr02{
rank = 1;
}

nebo pro ostatní čísla....

if global.aresexpr01 > global.aresexpr02 and global.aresexpr03 and global.aresexpr04{
rank = 1;
}
if global.aresexpr02 > global.aresexpr01 and global.aresexpr03 and global.aresexpr04{
rank = 1;
}
atd....

Mno snad to někdo pochopí......

 
Odpovědět
16.5.2016 16:52
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na David Šercl
TomBen:16.5.2016 18:37

Napsal bych si skript, který lodě seřadí podle zkušeností a vrátí id lodi o daném pořadí.
Jde to určitě dělat různě. Můžeš třeba využít ds_grid a funkci ds_grid_sort, nějak takto:

///get_Nth_sorted(N);

G=ds_grid_create(2,instance_number(lod));
counter=0;

with(lod)
{
ds_grid_set(other.G,0,other.counter,id)
ds_grid_set(other.G,1,other.counter,zkusenosti)
other.counter++
}

ds_grid_sort(G,1,true);

return(ds_grid_get(G,0,argument0));

Jde o ukázku postupu ( Ctrl+C a Ctrl+V nebude fungovat ), před použitím je kód nutné pochopit, odladit a doplnit o testy kritických stavů ( např. co bude vracet, když žádné lodě nebudou ).

Nahoru Odpovědět
16.5.2016 18:37
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
David Šercl
Člen
Avatar
Odpovídá na TomBen
David Šercl:17.5.2016 14:51

Díky moc za inspiraci, ale já jsem s gridama ještě nepracoval, takže jsem si to trochu nastudoval. Tohle jsem vymyslel, pro inspiraci:

(řazení od nejvyššího).....
myscore01 = 100;
myscore02 = 15;
myscore03 = 20;
myscore04 = 40;
list = ds_list_create();
ds_list_add(lis­t,myscore01);
ds_list_add(lis­t,myscore02);
ds_list_add(lis­t,myscore03);
ds_list_add(lis­t,myscore04);

ds_list_sort(lis­t,false);

Co na to říkáš?

 
Nahoru Odpovědět
17.5.2016 14:51
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na David Šercl
TomBen:17.5.2016 15:40

To by bylo určitě v pořádku, pokud bys nepotřeboval vědět, která instance tu nejvyšší hodnotu má. Jinak jde samozřejmě použít některý z řadicích algoritmů:
http://www.itnetwork.cz/…ritmy/razeni
a pak je celkem jedno, jakou pro ukládání použiješ datovou strukturu.
Taky by asi šlo použít priority frontu s tím, že priorita == zkušenost lodi.

Nejrychlejší ukládaní dat v GMS je klasické pole A[1]..A[N], ale řadící skript si pak musíš napsat. Pole žádný autosort nemá. Pokud máš ale jen pět lodí, tak na rychlosti asi nesejde.
Nicméně je docela slušné cvičení si nějaké to řazení v GML napsat.

Nahoru Odpovědět
17.5.2016 15:40
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
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 4 zpráv z 4.