私はゲームを作りたいと思っています。ゲームの開始時に、プレイヤーはモンスターを選ぶでしょう。簡単に維持できる確率アルゴリズムを書くには?
かなりモンスターを選ぶのは簡単です。
// get all monsters with equal chance
public Monster getMonsterFair(){
Monster[] monsters = {new GoldMonster(), new SilverMonster(), new BronzeMonster()};
int winIndex = random.nextInt(monsters.length);
return monsters[winIndex];
}
そして不当モンスターを選びます。
// get monsters with unequal chance
public Monster getMonsterUnFair(){
double r = Math.random();
// about 10% to win the gold one
if (r < 0.1){
return new GoldMonster();
}
// about 30% to winthe silver one
else if (r < 0.1 + 0.2){
return new SilverMonster();
}
// about 70% to win the bronze one
else {
return new BronzeMonster();
}
}
問題は、私はゲームに新しいモンスターを追加したとき、私はのif-elseを編集する必要があり、ということです。 または、私はGoldMonsterを0.2に勝ち取るチャンスを変更します。すべて0.1を0.2 に変更する必要があります。これは醜いものであり、容易には維持できません。
// get monsters with unequal change & special monster
public Monster getMonsterSpecial(){
double r = Math.random();
// about 10% to win the gold one
if (r < 0.1){
return new GoldMonster();
}
// about 30% to win the silver one
else if (r < 0.1 + 0.2){
return new SilverMonster();
}
// about 50% to win the special one
else if (r < 0.1 + 0.2 + 0.2){
return new SpecialMonster();
}
// about 50% to win the bronze one
else {
return new BronzeMonster();
}
}
コードが新しいモンスターが追加されたときに容易に維持することができ、モンスターの勝利のチャンスが調整されるように、どのようにこの確率アルゴリズムをリファクタリングすることができますができますか?
文字列 'GSSBBBBBBB'のランダムな位置から文字を選択します。このような文字列は簡単に変更できます。 –