Предполагается, что я хочу создать игру. В начале игры игрок выберет монстра.Как написать алгоритм вероятности, который можно легко поддерживать?
Легко выбрать монстра.
// 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();
}
}
Проблема заключается в том, что, когда я добавляю новый монстр в игру, я должен изменить если-нибудь. Или я изменяю шанс выиграть 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'. Такая строка легко изменить. –