За последние 24 часа нас посетили 23742 программиста и 1549 роботов. Сейчас ищут 1033 программиста ...

Уровень не правильный алгоритм!

Тема в разделе "PHP для новичков", создана пользователем engine.energy, 29 окт 2015.

  1. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    Я чета голову сломал об стенку!

    Каждый уровень растет смотря если

    чтобы получить 2 уровень надо набрать 100 опыт.
    а 3 надо набрать 200 опыт.
    То есть всего 300 опыт прокачать чтобы стать 3 уровень... Но почему то тупит код

    Код (PHP):
    1.         $levels = [
    2.                 1 => 0,
    3.                 2 => 100,
    4.                 3 => 200
    5.         ];
    6.  
    7.         self::$_exp = 150; //то получаеться что я уже 3 уровень, но я должен быть в 2 уровне. 
    8.         $max_exp = 0;
    9.         foreach(levels  AS $level => $exp_next)
    10.         {
    11.             $max_exp += $exp_next;
    12.             if(self::$_exp >= $next_level_exp )
    13.             {
    14.                 return $level;
    15.             }
    16.         }
    17.  
    Помогите а то мозг лопнет!
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    так он больше нуля ж сразу это раз, два - $next_level_exp это вообще что?
     
  3. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    Место должен быть igordata $max_exp =)
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну давай тогда просто может тебе лучше сделать сразу указывать суммарный опыт? выше которого считать лвл
     
  5. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    foreach ($levels ...)
     
  6. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    iNEEdhLw оно и так просто я тут набросал а так переделал и так будет вичислять максимальный при максимума!

    Добавлено спустя 3 минуты 48 секунд:
    Все нашел ошибку это был не уровень а максимальный опыт причина. из него искривил =)
     
  7. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    как-то странно считаешь.
    может просто указать номер уровня и необходимое для него кол-во опыта в виде массива, после чего тупо сравнивать текущий опыт с элементами массива?
    типа
    Код (PHP):
    1. $levels = array(1 => 100, 2 => 200, 3=>300 );
    2. $player_experience = 132; //for example
    3. foreach ($levels as $lvl => $exp){
    4. if ($player_experience >= $exp) return $lvl;
    5. }
    зачем что-то складывать я не понимаю)
     
  8. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    igordata, каждый цикл число опыта еоторый требует получить уровень. чтобы получить 2 уровень надо 100 опыт, могу везде писать по 100 опыт то качать всех уровня по 100 опыт то есть станет
    2 - требует 100 опыт
    3 уровень - 200 опыт требует
    А массив будет так
    1 => 0
    2 => 100
    3 => 100

    А может в начале сложно качать а в конце станет легче качать вот вся суть хотел разные!

    Добавлено спустя 1 минуту 27 секунд:
    iNEEdhLw, выше написал зачем =)

    Добавлено спустя 2 минуты 10 секунд:
    Не всегда будет возврашать 1 уровень =) алгорит для вас обманут!
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  10. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    а, немного не понял. это граничные значения опыта для уровня?
    значит знак сравнения поменять в обратную сторону.
    Код (PHP):
    1. $levels = array(1 => 100, 2 => 200, 3=>300 );
    2. $player_experience = 132; //for example
    3. foreach ($levels as $lvl => $exp){
    4. if ($player_experience <= $exp) return $lvl;
    5. } 
     
  11. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    iNEEdhLw, прошу свали с темы! Ты что не знаешь что он даст тебе в ответ? Я сказал мне нужно не проверка опыт больше или меньше....

    Я сказал мне нужен

    если чтобы попасть 2 уровень нужно 100 опыт набрать с 0 опыта начального уровня, то есть 1.

    а 2 уровень до 3 нужно набрать 100 опыт, с 3 до 4 нужно 100 опыт... Так как я могу изменить массив лишь.

    Код (PHP):
    1.     function GetLevel()
    2.     {
    3.         $levels = [
    4.             2 => 100,
    5.             3 => 100,
    6.             4 => 100
    7.         ];
    8.  
    9.         $player_exp = 200; //for example
    10.         $next_exp = 0;
    11.         foreach ($levels as $level => $exp) {
    12.  
    13.             $next_exp += $exp; // Тут накапливая каждого уровня если равен начало 100, 200, 300 и так далее и проверяем
    14.  
    15.             // Проблема том что если у меня опыт 200 то получим 2 уровень но, после 2 уровня проверяет условие
    16.             // как мой опыт больше чем у 2 уровня 100 то остаеться даже у меня опыт 200 а должен 3 уровень
    17.             if ($player_exp >= $next_exp) {
    18.                 return $level;
    19.             }
    20.         }
    21.  
    22.         return 1;
    23.     }
    24.  
    Добавлено спустя 3 минуты 16 секунд:
    Думаю 2 раза делать foreach То проблемы пропадет как то!

    Добавлено спустя 9 минут 25 секунд:
    Сделал вот так но много кода и 2 раза цикл как то муторно!

    Код (PHP):
    1. function __construct($exp)
    2.     {
    3.         self::$_exp = $exp;
    4.         self::$_data = array(
    5.             2 => 100,
    6.             3 => 100,
    7.             4 => 100
    8.         );
    9.  
    10.         $next_exp = 0;
    11.         foreach (self::$_data as $level => $exp) {
    12.             $next_exp += $exp;
    13.             self::$_data[$level] = $next_exp;
    14.         }
    15.  
    16.         self::$_data = array_reverse(self::$_data, true);
    17.     }
    18.  
    19.     function isNextLevel($level)
    20.     {
    21.         if ($this->GetLevel() > $level) {
    22.             return true;
    23.         }
    24.  
    25.         return false;
    26.     }
    27.  
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    :D Тупой и злой
     
  13. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    ладно, пошел я наухй.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    :D
    Не мешаем человеку заниматься правильным программированием

    [​IMG]