Diskuze: Porovnání čísel

Ostatní jazyky GameMaker GameMaker Porovnání čísel

Avatar
David Šercl
Člen
Avatar
David Šercl:

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. května 16:52
Avatar
TomBen
Redaktor
Avatar
Odpovídá na David Šercl
TomBen:

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  +1 16. května 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:

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. května 14:51
Avatar
TomBen
Redaktor
Avatar
Odpovídá na David Šercl
TomBen:

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. května 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.