Попытка найти функцию для расчета изменений атрибутов в игре - PullRequest
0 голосов
/ 07 ноября 2018

Я пишу игру, в которой после каждого года в зависимости от результатов меняются атрибуты персонажей. Игра представляет собой симулятор кинобизнеса, и вот пример уродливого кода, который я сейчас использую:

if (movie.Reviews.Avg > 8.5f)
{
    movie.Producer.Reputation += 6f / movie.Producer.Reputation;
    return;
}
else if (movie.Reviews.Avg > 7.5f)
{
    movie.Producer.Reputation += 5f / movie.Producer.Reputation;
    return;
}
else if (movie.Reviews.Avg > 6.5f)
{
    movie.Producer.Reputation += 4f / movie.Producer.Reputation;
    return;
}
else if (movie.Reviews.Avg > 5)
{
    movie.Producer.Reputation += 1f / movie.Producer.Reputation;
    return;
}
else if (movie.Reviews.Avg > 4.5)
{
    return;
}
else if (movie.Reviews.Avg > 4)
{
    movie.Producer.Reputation -= movie.Producer.Reputation / 6f;
    return;
}
else if (movie.Reviews.Avg > 3)
{
    movie.Producer.Reputation -= movie.Producer.Reputation / 5f;
    return;
}
else if (movie.Reviews.Avg > 2)
{
    movie.Producer.Reputation -= movie.Producer.Reputation / 4f;
    return;
}
else
{
    movie.Producer.Reputation -= movie.Producer.Reputation / 3f;
    return;
}

Мало проблем с этим кодом:

  • Репутация шар. Хорошие продюсеры делают хороший выбор, поэтому их фильмы получают хорошие отзывы, а их репутация становится еще выше.

  • Поскольку репутация продолжает расти, абсолютные изменения в атрибутах становятся меньше, а повышение в званиях становится слишком медленным и сложным.

Что я смотрю из функции:

  • Диапазон 0-10.
  • На вершине диапазона рост идет медленно, даже с хорошими рецензиями, но если у вашего фильма плохие рецензии, спад резко. И наоборот для нижней части диапазона.

1 Ответ

0 голосов
/ 07 ноября 2018

Попробуйте следующее:

            KeyValuePair<float, float>[] average = {
               new KeyValuePair<float,float>(2,-3f),
               new KeyValuePair<float,float>(3,-4f),
               new KeyValuePair<float,float>(4,-5f),
               new KeyValuePair<float,float>(4.5f,-6f),
               new KeyValuePair<float,float>(5,0),
               new KeyValuePair<float,float>(6.5f,1f),
               new KeyValuePair<float,float>(7.5f,4f),
               new KeyValuePair<float,float>(8.5f,5f),

            };


            float reputation = 123;
            float review = 3.3f;
            reputation += average.Where(x => review > x.Key).Select(x => (x.Value == 0) ? 0 : reputation / x.Value).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...