Page 1 of 3
Random
Posted: 2013 Aug 26 20:54
by xFrostas
Sveiki, reikia truputį pagalbos su random, kaip paprasčiausią pavizdį paimsiu 3 klases. Tarkim komandoje yra trys žaidėjai, ir jiem parenka random klasę, o kaip padaryti, kad ji nesikartotų? Turiu omenyje tai, kad visi 3 žaidėjai gautų po skirtingą klasę, nes paprastu būdu gali būti 2 tokios pačios ar net 3.
Re: Random
Posted: 2013 Aug 26 21:35
by aaarnas
Papildomam masyve pažymėk, kad ta klasė jau panaudota ir pastoviai tikrini ar klasė nepanaudota.
Code: Select all
new player_class[33]new classes[3]new bool:used_classes[3]get_random_class(id) { new rand while (used_classes[(rand=random(3))]) ; player_class[id] = rand used_classes[rand] = true}
Na vienas iš būtų. Bet turi prieš tai įsitikinti, kad bent viena klasė nėra užimta, nes kitaip amžinas ciklas susidarys ten.
Jei po to norėsi visą masyvą išvalyti, tai:
Code: Select all
arrayset(used_classes, false, sizeof(used_classes))
Re: Random
Posted: 2013 Aug 26 21:39
by xFrostas
Ačiū už pagalbą
Re: Random
Posted: 2013 Aug 27 00:59
by alfre
paprasciau galima.... true false uzmeti ir viskas..
Re: Random
Posted: 2013 Aug 27 01:14
by InvIs
O tai arno pavyzdyje ne taip padaryta?
Re: Random
Posted: 2013 Aug 27 10:55
by alfre
Gerai padaryta,bet kodo daugiau
Re: Random
Posted: 2013 Aug 27 11:04
by InvIs
O leisk paklausti, kaip tu nieko nedarydamas patikrinsi ar klasė užimta?
Re: Random
Posted: 2013 Aug 27 11:39
by alfre
Jau sakiau.
Re: Random
Posted: 2013 Aug 27 12:34
by aaarnas
alfre wrote:Jau sakiau.
Tai jau pasigirk kodu, kad taip geriau žinai. Keli variantai geriau nei vienas.
Re: Random
Posted: 2013 Aug 27 14:19
by sss
galima ir taip, bet kartais pasikartos ;p, pagal logika jei yra tik 3 klases, o zmoniu daugiau nei 3, bet kuriuo atveju kartosis, su arno kodu kiek maziau, nes yra atmintine padaryta, kad nesikartotu, bet jei nori optimalesnio varianto naudok sita
Code: Select all
enum _:classes { A = 0, B = 1, C = 2} stock get_random_class() { new ran = random_num(A, C) return ran }