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 }