XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Игрострой> Общий форум
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Tiodor

offline
Опыт: 75,784
Активность:
[Unity] Как не плодить условия?
Как можно записать вот это:
В облегченном варианте, то есть чтобы не писать 20 if на каждый уровень?
Есть другие способы?

Отредактировано Tiodor, 22.01.2014 в 20:19.
Старый 22.01.2014, 19:13
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
int getlevel(int CurrentExp){
  int const MaxLevel = 8;  //максимальный уровень
  int ExpirienceBorders[MaxLevel] = {0,100,300,650,1000,1500,2500,4000};  //экспа, на которой лвлап
  for (int i = 0; i <= MaxLevel; i++) {
    if(ExpirienceBorders[i] < CurrentExp && CurrentExp <= ExpirienceBorders[i+1]){
      return i+1;	
    };
  };
}

Отредактировано Clamp, 22.01.2014 в 19:36.
Старый 22.01.2014, 19:17
ScorpioT1000
Работаем
online
Опыт: отключен
  1. причем тут игрострой
  2. зря ты это написал тут, читай книги
Старый 22.01.2014, 19:23
Hanabishi
COOL STATUS
offline
Опыт: отключен
double[] step = { 1, 300, 650, 1000, 1500, 2500, 4000 };
int lvl;
double exp = 700;//сюда опыт

for(lvl = 0; lvl < step.Length; lvl++) {
    if(exp < step[lvl]) {
        break;
    }
}
*upd

Отредактировано Hanabishi, 22.01.2014 в 20:52.
Старый 22.01.2014, 19:24
Tiodor

offline
Опыт: 75,784
Активность:
  1. потому, что это в юнити
  2. хоть долей, но связано с геймдевом
  3. у нас нет форума для кода и т.д
зря ты это написал тут, читай книги
ты всегда отвечаешь на любые вопросы: иди читай книги?
человек: - не знаешь как отключить эту пилу, она рубит мою руку?
скорпи: - иди читай книги
Tiodor добавил:
Hanabishi, спасибо, работает как часы.
Старый 22.01.2014, 19:34
ScorpioT1000
Работаем
online
Опыт: отключен
Потому что это раз в 10 более нубский вопрос, чем "как сделать героя выше 10 лвл" в вар3. Не позорься. На этом вопросе ты не остановишься, если ничего не прочитаешь. Появится еще 2000 вопросов.
Старый 22.01.2014, 19:34
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Hanabishi, а возвращать кто будет?
Старый 22.01.2014, 19:37
Hanabishi
COOL STATUS
offline
Опыт: отключен
Clamp, уровень будет в lvl, как и хотел тио
Старый 22.01.2014, 19:38
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Hanabishi, в локальной, автоматически обнуляющейся переменной <3
Clamp добавил:
Или юнити юзает не функции в скриптах?
Старый 22.01.2014, 19:40
AsagiriGen
щпаовапа
offline
Опыт: 2,835
Активность:
ScorpioT1000:
Потому что это раз в 10 более нубский вопрос, чем "как сделать героя выше 10 лвл" в вар3. Не позорься. На этом вопросе ты не остановишься, если ничего не прочитаешь. Появится еще 2000 вопросов.
Согласен. Что-то почитать надо хотя бы для того, чтобы знать какие штуки существуют. Если ты думаешь, что это отнимет много времени - не отнимет, а только сэкономит.
Старый 22.01.2014, 19:43
Hanabishi
COOL STATUS
offline
Опыт: отключен
Clamp, требовался принцип, а не готовая функция, и
Hanabishi, спасибо, работает как часы.
Tiodor, есть небольшая корректировка, посмотри снова пост выше, иначе если опыт больше максимального будет давать на уровень ниже
Старый 22.01.2014, 19:48
ScorpioT1000
Работаем
online
Опыт: отключен
Коллеги, слабо без for решить? =)
Старый 22.01.2014, 19:53
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Hanabishi, у меня это сразу учтено >_>
Неблагодарные, сто лет кода не писал, а тут даже на идеон слазил закомпилить, чтобы точно всё верно было(
Clamp добавил:
ScorpioT1000, а зачем?
Старый 22.01.2014, 19:54
ScorpioT1000
Работаем
online
Опыт: отключен
ради развлечения)
Старый 22.01.2014, 19:58
Tiodor

offline
Опыт: 75,784
Активность:
есть небольшая корректировка, посмотри снова пост выше, иначе если опыт больше максимального будет давать на уровень ниже
этот вариант который ты щас кинул у меня не работает =\
а вот этот работаешь хорошо и без проблем и на уровень ниже не дает
((код
for (lvl = 0; lvl < step.Length; lvl++)
{
if (exp < step[lvl])
{
break;
}
}
))
Tiodor добавил:
Clamp,
int getlevel(int CurrentExp){
это мне не совсем понятно. это функция?
Старый 22.01.2014, 20:02
ScorpioT1000
Работаем
online
Опыт: отключен
оптимизировано =О
double[] step = { 1, 300, 650, 1000, 1500, 2500, 4000 };
int lvl;
for (lvl = 0; lvl < step.Length && exp >= step[lvl]; lvl++);
step лучше передавать в функцию аргументом вместе с exp, чтобы логика и данные были разделены
Старый 22.01.2014, 20:05
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Tiodor, функция на C++, рабочая
Старый 22.01.2014, 20:09
Hanabishi
COOL STATUS
offline
Опыт: отключен
Tiodor, упс, забыл -1 )
ScorpioT1000, забыл про это "-_-
Короче, чтобы не было нареканий, вот код готовой отдельной функции:
int GetLvlByExp(double exp) {
    double[] step = { 1, 300, 650, 1000, 1500, 2500, 4000 };
    int lvl = 0;
    for(lvl = 0; lvl < step.Length && exp >= step[lvl]; lvl++);
    return lvl;
}

Отредактировано Hanabishi, 22.01.2014 в 21:25.
Старый 22.01.2014, 20:12
ScorpioT1000
Работаем
online
Опыт: отключен
» решение без цикла для овер 9к обращений в секунду
        System.Collections.Generic.SortedList<double, int> list;
        list.Add(0.0, 1);
        list.Add(133.0, 2);
        list.Add(266.0, 3);
        list.Add(399.0, 4);
        list.Add(532.0, 5);
        list.Add(665.0, 6);
        list.Add(798.0, 7);
        list.Add(931.0, 8);
        list.Add(1064.0, 9);
        list.Add(1197.0, 10);
        list.Add(1330.0, 11);
        list.Add(1463.0, 12);
        list.Add(1596.0, 13);
        list.Add(1729.0, 14);
        list.Add(1862.0, 15);
        list.Add(1995.0, 16);
        list.Add(2128.0, 17);
        list.Add(2261.0, 18);
        list.Add(2394.0, 19);
        list.Add(2527.0, 20);
        list.Add(2660.0, 21);
        list.Add(2793.0, 22);
        list.Add(2926.0, 23);
        list.Add(3059.0, 24);
        list.Add(3192.0, 25);
        list.Add(3325.0, 26);
        list.Add(3458.0, 27);
        list.Add(3591.0, 28);
        list.Add(3724.0, 29);
        list.Add(3857.0, 30);
        list.Add(3990.0, 31);
        list.Add(4123.0, 32);
        list.Add(4256.0, 33);
        list.Add(4389.0, 34);
        list.Add(4522.0, 35);
        list.Add(4655.0, 36);
        list.Add(4788.0, 37);
        list.Add(4921.0, 38);
        list.Add(5054.0, 39);
        list.Add(5187.0, 40);
        list.Add(5320.0, 41);
        list.Add(5453.0, 42);
        list.Add(5586.0, 43);
        list.Add(5719.0, 44);
        list.Add(5852.0, 45);
        list.Add(5985.0, 46);
        list.Add(6118.0, 47);
        list.Add(6251.0, 48);
        list.Add(6384.0, 49);
        list.Add(6517.0, 50);
        list.Add(6650.0, 51);
        list.Add(6783.0, 52);
        list.Add(6916.0, 53);
        list.Add(7049.0, 54);
        list.Add(7182.0, 55);
        list.Add(7315.0, 56);
        list.Add(7448.0, 57);
        list.Add(7581.0, 58);
        list.Add(7714.0, 59);
        
        // решение
        double exp = 210.4;
        list.add(exp, 0);
        int id = list.IndexOfKey(exp);
        int level = 0;
        if(id > 0) {
            level = list.Values(id - 1);
        }
        list.remove(exp);
ScorpioT1000 добавил:
Hanabishi, if(exp < step[step.Length-1]) не нужно, последний i++ делает своё дело
Старый 22.01.2014, 20:39
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
Не шарю, но list.add в данном случае быстро делается?
Старый 22.01.2014, 20:51
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 17:31.