X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Вопрос о PHP (таблица опыта)
OldSpice
OldSpice
Topic Starter сообщение 6.4.2012, 19:33; Ответить: OldSpice
Сообщение #1


Старожил
******

Группа: Active User
Сообщений: 1572
Регистрация: 17.8.2011
Из: Латвия
Поблагодарили: 244 раза
Репутация:   48  


Добрый день!

Есть значение в базе допустим 100000. Это полностью количество опыта, которое набрал пользователь.

Есть таблица опыта, допустим 1 уровень равен 1000 опыта, 2ур = 4000, 3ур = 10000 и так далее. Допустим то набранное количество опыта равно 9 уровню.

У меня нет не малейшего понятия, как можно вывести из базы это значение не ввиде обычного числа "100000", типа $row['exp'], а уже посчитаный уровень. Допустим как 9 (100000).

Подскажите пожалуйста какое-нибудь решение!

Сообщение отредактировал OldSpice - 6.4.2012, 19:34


--------------------
Вот тут я беру контент для трех групп вконтакте :)
Наполняю паблики на автомате, за 3 минуты в день!
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 6.4.2012, 19:39; Ответить: webpavilion
Сообщение #2


сеошник на пенсии
*******

Группа: Active User
Сообщений: 2726
Регистрация: 28.4.2009
Из: МО
Поблагодарили: 1659 раз
Репутация:   171  


(OldSpice @ 6.4.2012, 19:33) *
Подскажите пожалуйста какое-нибудь решение!

http://dev.mysql.com/doc/refman/5.0/en/case-statement.html и http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html самый простой вариант.


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
OldSpice
OldSpice
Topic Starter сообщение 6.4.2012, 20:13; Ответить: OldSpice
Сообщение #3


Старожил
******

Группа: Active User
Сообщений: 1572
Регистрация: 17.8.2011
Из: Латвия
Поблагодарили: 244 раза
Репутация:   48  


Там темный лес biggrin.gif
Может какая-то функция есть с описанием, чтобы я мог разобраться?


--------------------
Вот тут я беру контент для трех групп вконтакте :)
Наполняю паблики на автомате, за 3 минуты в день!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
dan1
dan1
сообщение 6.4.2012, 21:28; Ответить: dan1
Сообщение #4


Участник
***

Группа: User
Сообщений: 195
Регистрация: 12.8.2010
Из: Тагила
Поблагодарили: 74 раза
Репутация:   25  


Если уровень конечен, что можно создать таблицу с опытом и соотношением его с уровнем. Если не хотите париться с процедурами в MySQL, можно создать функцию расчёта уровня в PHP. Можете привести формулу расчёта уровня от опыта? Или хотя бы продолжите последовательность, а то в голову приходит несколько формул.
PS. Насколько я понимаю, формула является рекуррентной, иначе проблем бы не возникло.

Сообщение отредактировал dan1 - 6.4.2012, 21:31
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
OldSpice
OldSpice
Topic Starter сообщение 6.4.2012, 21:44; Ответить: OldSpice
Сообщение #5


Старожил
******

Группа: Active User
Сообщений: 1572
Регистрация: 17.8.2011
Из: Латвия
Поблагодарили: 244 раза
Репутация:   48  


Короче говоря сейчас такой вариант.
function getLevel($exp){
        $levels = array(
                1       => 1000,
                2       => 2000,
                3       => 3000,
                4       => 4000,
                5       => 5000);
        if ($exp <= $levels[1]) return 'Level 1';
        if ($exp <= $levels[2]) return 'Level 2';
        if ($exp <= $levels[3]) return 'Level 3';
        if ($exp <= $levels[4]) return 'Level 4';
        if ($exp <= $levels[5]) return 'Level 5';
}

И в профиле игрока выводим как
<?=getLevel($user['exp_war'])?>


Но есть проблема. Допустим при 4001 опыта, должен быть 4 уровень. А выводится пятый.


--------------------
Вот тут я беру контент для трех групп вконтакте :)
Наполняю паблики на автомате, за 3 минуты в день!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
dan1
dan1
сообщение 6.4.2012, 21:59; Ответить: dan1
Сообщение #6


Участник
***

Группа: User
Сообщений: 195
Регистрация: 12.8.2010
Из: Тагила
Поблагодарили: 74 раза
Репутация:   25  


Вот вам рекуррентный вариантик...
function getLevel($exp)
{
    if($exp < 1000) return 0;
    $decrement = 3000;
    $lvl = 1;
    while($exp - $decrement >= 1000)
    {
        $lvl++;
        $exp -= $lvl*$decrement;
    }
    return $lvl;
}
echo getLevel(100000);

А то что вы делаете, можно как раз сделать с помощью CASE THEN в MySQL.

Сообщение отредактировал dan1 - 6.4.2012, 22:06


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
xdvix
xdvix
сообщение 6.4.2012, 23:49; Ответить: xdvix
Сообщение #7


Частый гость
**

Группа: User
Сообщений: 77
Регистрация: 4.11.2010
Из: Россия/Марий_Эл
Поблагодарили: 14 раз
Репутация:   -2  


Функцию, а там
if($Опыт<$макс_значение для уровня){
$ur = X;
}
if(условие){
$ur = X;
}
if(условие){
$ur = X;
}
if(условие){
$ur = X;
}
if(условие){
$ur = X;
}
if(условие){
$ur = X;
}

и т.д.
В переменную попадет максимальное значение

Вотой вариант это определить шаг прогрессии к примеру 1.1+X или 3.5
И выполнять необходимые матем. действия


--------------------
php/mysql/html/css/joomla/WordPress/PrestaShop и еще много страшных слов
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 6.4.2012, 23:54; Ответить: webpavilion
Сообщение #8


сеошник на пенсии
*******

Группа: Active User
Сообщений: 2726
Регистрация: 28.4.2009
Из: МО
Поблагодарили: 1659 раз
Репутация:   171  


(OldSpice @ 6.4.2012, 21:44) *
Короче говоря сейчас такой вариант.

жесть... то же самое делает только правильно:
function trans($points) {
  return floor($points/1000);
}


(dan1 @ 6.4.2012, 21:59) *
Вот вам рекуррентный вариантик
мне кажется ваш код работает неправильно...

Сообщение отредактировал webpavilion - 6.4.2012, 23:54


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
dan1
dan1
сообщение 7.4.2012, 7:45; Ответить: dan1
Сообщение #9


Участник
***

Группа: User
Сообщений: 195
Регистрация: 12.8.2010
Из: Тагила
Поблагодарили: 74 раза
Репутация:   25  


(webpavilion @ 6.4.2012, 23:54) *
мне кажется ваш код работает неправильно...

Я делал функцию под последовательность значений из первого сообщения (там можно предположить, что каждое последующее значение расчитывается из предыдущего).
function trans($points) {
  return floor($points/1000);
}

Ну, а это конечно будет работать. Только вот если всё так просто зачем тс изначально описал другие значения..
как можно вывести из базы это значение

SELECT FLOOR(exp/1000) AS level FROM table
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 7.4.2012, 9:30; Ответить: webpavilion
Сообщение #10


сеошник на пенсии
*******

Группа: Active User
Сообщений: 2726
Регистрация: 28.4.2009
Из: МО
Поблагодарили: 1659 раз
Репутация:   171  


(dan1 @ 7.4.2012, 7:45) *
Я делал функцию под последовательность значений из первого сообщения

с учетом того что ТС дает провотеричивые задания, оба варианты верны, извените если задел. Такое лучше делать в mysql в любом случаи.

Получилась как всегда ТС просит подсказать, а в итоге все получает готовое решение.


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужны услуги php-разработчика, бартером за дизайн
вы мне скрипт, я вам дизайн
0 Caterpillar 243 Вчера, 23:15
автор: Caterpillar
Открытая тема (нет новых ответов) Вопрос по seo для интернет магазина
куда девать продвинутые товары, которые уже не выпускают
18 viktormerke 2823 15.12.2017, 15:18
автор: Smspva
Открытая тема (нет новых ответов) Недорогие услуги - php/js/mysql/jquery/bootstrap
2 vlads 664 13.12.2017, 21:01
автор: vlads
Открытая тема (нет новых ответов) Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
18 qpPeW 3494 12.12.2017, 13:32
автор: qpPeW
Открытая тема (нет новых ответов) php скрипты любой сложности / диз+верстка (адаптивно)
любые задачи на php - автоматизация, парсинг, работа с БД
1 affrodita 515 8.12.2017, 17:40
автор: affrodita


 



RSS Текстовая версия Сейчас: 18.12.2017, 18:59
Дизайн