Войти
ПрограммированиеФорумОбщее

Как описать увеличение уровня при определенном значении опыта.

Страницы: 1 2 3 Следующая »
#0
7:19, 13 сен. 2021

Сабж. Неужели в цикле if (когда описывается значение для каждого уровня)?

Пробую писать текстовую рпг. Надо чтобы при значении опыта равном 500 + 250 на уровень повышался этот самый уровень.

Я пробовал делать такое, но функция срабатывает один раз (в жизни программы лол). Вижу что мое решение в корне не верно.

  hero.xp = 0;
  for (int i = 1; i <= 10; ++i)
    if (hero.xp == 500 + (i - 1) * 250) {

      hero.lvlup();
    }


#1
8:00, 13 сен. 2021
Hero::Hero()
{
  level = 1;
  required_exp = getRequiredExp(level);
}

int Hero::getRequiredExp(int level)
{
  return 500 + 250 * (level - 1);
}

void Hero::levelUp()
{
  if(level < max_level)
    level++;

  required_exp = getRequiredExp(level);

  if(current_exp > required_exp * 0.25) // prevent double level ups
    current_exp = required_exp * 0.25;
}

void Hero::onExpChanged(int exp)
{
  current_exp += exp;
  if(current_exp >= required_exp)
  {
    current_exp -= required_exp;
    levelUp();
  }
}
#2
8:11, 13 сен. 2021

Aroch, о спасибо)).

#3
9:00, 13 сен. 2021

Aroch
> if(current_exp > required_exp * 0.25) // prevent double level ups
> current_exp = required_exp * 0.25;
Какой-то трэш, лучше так:

void Hero::onExpChanged(int exp)
{
  current_exp += exp;
  while(level < maxLevel && current_exp >= getRequiredExp(level))
  {
    current_exp -= getRequiredExp(level);
    levelUp();
  }
}
#4
9:53, 13 сен. 2021

У тебя есть значение общего опыта. И ты из него считаешь уровень каждый раз, когда нужно. В итоге ты можешь скалировать уровень как хочешь вверх и вдоль. И просто взяв и переделав формулу можешь всех игроков сместить левее или правее.

#5
10:11, 13 сен. 2021

lookid
Это красивый подход (особенно глазами программиста), но на деле он не работает.
Всё-таки психологически и игроки, и дизайнеры воспринимают уровень как основную величину, а опыт - как вспомогательную "дробную часть" уровня.
На реальном проекте тебе гораздо чаще тебе нужно будет перебалансить "сколько опыта между N и N+1 уровнем", а не скалировать уровни по общей экспе.
Ну и игроки очень не любят, когда у них внезапно меняется уровень

#6
(Правка: 18:27) 18:21, 13 сен. 2021

meekobold
> Какой-то трэш, лучше так:
тоже самое могу сказать про твой подход, но при этом аргументировать.
Если ты делаешь треш игру в которой уровень это всего лишь очередное число, то за выполнение очередного квеста получить с десяток уровень за раз будет нормой. Всё же треш игра это допусает. Если же ты делаешь классическую систему в которой уровень это целый этап в развитии героя, то дизайн строится таким образом что в принципе не должно быть таких возможностей чтобы игрок получал опыта больше чем ему нужно на уровень за раз, и если же он это проделал с помощью читов или дыр в дизайне, то можно подстраховаться и ограничить прыжки по уровням таким вот образом.

Так что твой вариант и есть тот самый треш.

lookid
> У тебя есть значение общего опыта. И ты из него считаешь уровень каждый раз,
> когда нужно. В итоге ты можешь скалировать уровень как хочешь вверх и вдоль. И
> просто взяв и переделав формулу можешь всех игроков сместить левее или правее.
при смерти может налагаться штраф в потерю опыта, но он может не предполагать потерю уровня. Информация об уровне может понадобится во множестве механик и каждый раз его заново вычислять, может быть дорогим удовольствием, особенно если это не такая тупая формула как у ТСа, а табличка составленная дизайнером и уровней не 10 а 1000. Каждый раз делать поиск пускай и бинарный так себе.

#7
19:37, 13 сен. 2021

Aroch
> не должно быть таких возможностей чтобы игрок получал опыта больше чем ему
> нужно на уровень за раз
Представь что на 1-2 уровне игрок умудрился как-то пройти мимо босса и обчистить сокровищницу. И вместо 2-5 уровней получает 1. Как думаешь какой отзыв об игре он тутже пойдёт писать? Да и бред это, создавать препятствие именно по разовому начислению.
И вдобавок в играх принято выдавать первые уровни быстро, а уже где-то на 20 левеле найти какой-либо разовый источник чтобы апнуть 2 левела практически нереатьно.

Если конечно хочется ограничить гипер-скоростной ап, то следует посмотреть как сделали это в POE.

#8
19:38, 13 сен. 2021

Aroch
> и уровней не 10 а 1000.
Покажи хоть одну игру с тысячей уровней.

#9
19:59, 13 сен. 2021

samrrr
> Покажи хоть одну игру с тысячей уровней.
знаю как минимум одну с 450 уровнями. И это без гугла.
> Представь что на 1-2 уровне игрок умудрился как-то пройти мимо босса и
> обчистить сокровищницу.
допустим.
> И вместо 2-5 уровней получает 1
и с чего он должен получить 2-5 уровней? Он должен получить то что лежало в сокровищнице а не уровни.
> Как думаешь какой отзыв об игре он тутже пойдёт писать?
без разницы, не ЦА значит.
> Да и бред это, создавать препятствие именно по разовому начислению.
бред если хочешь сделать треш игру.
> И вдобавок в играх принято выдавать первые уровни быстро
как это мешает получать уровни быстро? И в чем смысл выдавать сразу 20 уровней? Зачем вообще в игре тогда существуют 1-19 уровни если можно сразу получить 20? Жизни между 1-19 получается нет? Игра пустая? Треш? С чего всего началось к тому и пришли.

#10
20:00, 13 сен. 2021

samrrr
> Покажи хоть одну игру с тысячей уровней.
Я уверен, что у азиатов такое легко найти)

Aroch
Извини, если я грубо высказался, но всё равно я с тобой не согласен. Если я ухитрился получить тонну экспы, то я хочу её получить. С твоим вариантом я, как игрок, буду чувствовать себя обманутым. С моим - clever use of game mechanics
В Diablo3 если подходить с умом к прокачке новых персонажей, то можно получать десятки уровней за одного моба. В Payday2 можно получать кучу уровней за выполнение одной миссии. Это весело, это честно, я не хочу лишать игрока таких возможностей

#11
20:10, 13 сен. 2021

Aroch
> знаю как минимум одну с 450 уровнями.
Не не, именно с тысячей покажи.
> и с чего он должен получить 2-5 уровней? Он должен получить то что лежало в
> сокровищнице а не уровни.
Экспа за прохождение например. Ведь по факту босса валить уже нет смысла.
> бред если хочешь сделать треш игру.
99.9% игр треш? И их рейтинг конечно накручен?
> как это мешает получать уровни быстро?
Никак но ты лишаешь игрока радости от того что он типо - "обыграл" систему,то что он на получение уровней таким способом потратил в 5 раз больше времени чем просто набить экспы это так, мелочи. На баланс это никак не влияет ибо твоё условие будет срабатывать только на самых начальных уровнях.

#12
20:33, 13 сен. 2021

Aroch
> без разницы, не ЦА значит.
Надеюсь, ты не практикуешь гейм-дизайн.

#13
20:34, 13 сен. 2021

вопрос кода решили а вопрос дизайна игры это дело другое. я лично предпочитаю чтобы на уровень 1 требовалось 1 опыта а на уровень 100 - 100 опыта, но у геймдизов с этим проблемы. это уже их дело.

#14
20:45, 13 сен. 2021

samrrr
> Не не, именно с тысячей покажи.
да даже пускай 450, что это меняет? Ты разберись какую позицию ты для начала защищаешь.
> Экспа за прохождение например. Ведь по факту босса валить уже нет смысла.
либо режь экспу за квест исходя из уровня игрока, либо режь по факту получения. Без разницы как, но ситуация когда игрок может за раз получить неограниченное количество уровней, треш.
> 99.9% игр треш? И их рейтинг конечно накручен?
между рейтингом и трешом нет прямой связи если ты не знал, треш игра может быть одновременно и популярной и прибыльной.
> Никак но ты лишаешь игрока радости от того что он типо - "обыграл" систему
угу, когда иначе игроку радости доставить на начальных уровнях не умеешь, приходится пользоваться треш механиками. В топку.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее