Есть викторина. В ней пользователь угадывает один из 3-х вариантов. Каждый вариант имеет свой вес:
Вариант 1: 20 очков
Вариант 2: 30 очков
Вариант 3: 50 очков
Если игрок отгадывает вариант, то получает весь вес. Если нет, то только его часть, распределение которой строго регламентировано.
Ответ игрока || Правильный ответ || Очки
1 1 100%
2 1 75%
3 1 50%
1 2 75%
2 2 100%
3 2 75%
1 3 25%
2 3 50%
3 3 100%
Можно запросто написать что-нибудь в духе:
calcRateScore: function(fact, user) {
var rateScore = 0;
switch (fact) {
case 1:
switch (user) {
case 1:
rateScore = 20;
break;
case 2:
rateScore = 20 * 0.75;
break;
case 3:
rateScore = 20 * 0.5;
break;
}
break;
case 2:
switch (user) {
case 1:
rateScore = 30 * 0.75;
break;
case 2:
rateScore = 30;
break;
case 3:
rateScore = 30 * 0.75;
break;
}
break;
case 3:
switch (user) {
case 1:
rateScore = 50 * 0.25;
break;
case 2:
rateScore = 50 * 0.5;
break;
case 3:
rateScore = 50;
break;
}
break;
}
return rateScore;
}
Но выглядит это просто ужасно. Подскажите, как избавиться от этих switch / case (желательно от всех)?
Ответ
var answers = [
null,
{
weight: 20,
fractions: [0, 1, 0.75, 0.5]
},
{
weight: 30,
fractions: [0, 0.75, 1, 0.75]
},
{
weight: 50,
fractions: [0, 0.25, 0.5, 1]
}
];
calcRateScore: function(fact, user) {
var rateScore = 0;
if (answers[fact] && answers[fact].fractions[user]) {
rateScore = answers[fact].weight * answers[fact].fractions[user];
}
return rateScore;
}
Комментариев нет:
Отправить комментарий