乱数の話。
最近友人とFF13のオプティマの話をしていて、
「オプティマって全部で何種類ある?」とか「組合せ」とか「順列」の話から乱数の話になった。
友人「ファイアーエンブレムみたいなパラメータの成長率はどう実装する?」
私 「レベルアップ時にHPが80%で1アップとか?」
友人「そそ」
私 「とりあえず100までの乱数で80以下なら+1とか」
int rate = 80; int r = ( rand() % 100 ) + 1; //[1,100] if( r <= rate ) { hp ++; }
友人「じゃ、ウルフのHP成長率120%はどうする?」
私 「かならず+1で、さらに20%で+1だよね」
int rate = 120; if( rate >= 100 ) { hp ++; rate -= 100; } int r = ( rand() % 100 ) + 1; //[1,100] if( r <= rate ) { hp ++; }
友人「if文書くの嫌だなー。if使わなくても書けるよね」
私 「マジ?」
友人「サジ。」
int rate = 120; int r = rand() % 100; //[0,99] int add = ( rate + r ) / 100; //[1,2] hp += add;
私 「おお〜。なるほど。」
実際にはどう実装してるんですかね?
皆さんはどう実装しますか?