Я чета голову сломал об стенку! Каждый уровень растет смотря если чтобы получить 2 уровень надо набрать 100 опыт. а 3 надо набрать 200 опыт. То есть всего 300 опыт прокачать чтобы стать 3 уровень... Но почему то тупит код Код (PHP): $levels = [ 1 => 0, 2 => 100, 3 => 200 ]; self::$_exp = 150; //то получаеться что я уже 3 уровень, но я должен быть в 2 уровне. $max_exp = 0; foreach(levels AS $level => $exp_next) { $max_exp += $exp_next; if(self::$_exp >= $next_level_exp ) { return $level; } } Помогите а то мозг лопнет!
ну давай тогда просто может тебе лучше сделать сразу указывать суммарный опыт? выше которого считать лвл
iNEEdhLw оно и так просто я тут набросал а так переделал и так будет вичислять максимальный при максимума! Добавлено спустя 3 минуты 48 секунд: Все нашел ошибку это был не уровень а максимальный опыт причина. из него искривил =)
как-то странно считаешь. может просто указать номер уровня и необходимое для него кол-во опыта в виде массива, после чего тупо сравнивать текущий опыт с элементами массива? типа Код (PHP): $levels = array(1 => 100, 2 => 200, 3=>300 ); $player_experience = 132; //for example foreach ($levels as $lvl => $exp){ if ($player_experience >= $exp) return $lvl; } зачем что-то складывать я не понимаю)
igordata, каждый цикл число опыта еоторый требует получить уровень. чтобы получить 2 уровень надо 100 опыт, могу везде писать по 100 опыт то качать всех уровня по 100 опыт то есть станет 2 - требует 100 опыт 3 уровень - 200 опыт требует А массив будет так 1 => 0 2 => 100 3 => 100 А может в начале сложно качать а в конце станет легче качать вот вся суть хотел разные! Добавлено спустя 1 минуту 27 секунд: iNEEdhLw, выше написал зачем =) Добавлено спустя 2 минуты 10 секунд: Не всегда будет возврашать 1 уровень =) алгорит для вас обманут!
а, немного не понял. это граничные значения опыта для уровня? значит знак сравнения поменять в обратную сторону. Код (PHP): $levels = array(1 => 100, 2 => 200, 3=>300 ); $player_experience = 132; //for example foreach ($levels as $lvl => $exp){ if ($player_experience <= $exp) return $lvl; }
iNEEdhLw, прошу свали с темы! Ты что не знаешь что он даст тебе в ответ? Я сказал мне нужно не проверка опыт больше или меньше.... Я сказал мне нужен если чтобы попасть 2 уровень нужно 100 опыт набрать с 0 опыта начального уровня, то есть 1. а 2 уровень до 3 нужно набрать 100 опыт, с 3 до 4 нужно 100 опыт... Так как я могу изменить массив лишь. Код (PHP): function GetLevel() { $levels = [ 2 => 100, 3 => 100, 4 => 100 ]; $player_exp = 200; //for example $next_exp = 0; foreach ($levels as $level => $exp) { $next_exp += $exp; // Тут накапливая каждого уровня если равен начало 100, 200, 300 и так далее и проверяем // Проблема том что если у меня опыт 200 то получим 2 уровень но, после 2 уровня проверяет условие // как мой опыт больше чем у 2 уровня 100 то остаеться даже у меня опыт 200 а должен 3 уровень if ($player_exp >= $next_exp) { return $level; } } return 1; } Добавлено спустя 3 минуты 16 секунд: Думаю 2 раза делать foreach То проблемы пропадет как то! Добавлено спустя 9 минут 25 секунд: Сделал вот так но много кода и 2 раза цикл как то муторно! Код (PHP): function __construct($exp) { self::$_exp = $exp; self::$_data = array( 2 => 100, 3 => 100, 4 => 100 ); $next_exp = 0; foreach (self::$_data as $level => $exp) { $next_exp += $exp; self::$_data[$level] = $next_exp; } self::$_data = array_reverse(self::$_data, true); } function isNextLevel($level) { if ($this->GetLevel() > $level) { return true; } return false; }