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



 

Здравствуйте, гость (

| Вход | Регистрация )

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


Добрый день!

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

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

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

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

Сообщение отредактировал OldSpice - 6.4.2012, 19:34
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 6.4.2012, 19:39; Ответить: webpavilion
Сообщение #2


(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


Там темный лес biggrin.gif
Может какая-то функция есть с описанием, чтобы я мог разобраться?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
dan1
dan1
сообщение 6.4.2012, 21:28; Ответить: dan1
Сообщение #4


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

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


Короче говоря сейчас такой вариант.
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 уровень. А выводится пятый.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
dan1
dan1
сообщение 6.4.2012, 21:59; Ответить: dan1
Сообщение #6


Вот вам рекуррентный вариантик...
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


Функцию, а там
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


(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


(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


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

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

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

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


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

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


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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3290 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1169 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44764 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Есть спецы по php/laravel?
3 Mixatraider 1856 26.5.2023, 20:48
автор: Mixatraider
Открытая тема (нет новых ответов) Опытный PHP\Python разработчик в поиске интересных задач
6 daikzlex 3360 25.5.2023, 13:55
автор: daikzlex


 



RSS Текстовая версия Сейчас: 28.3.2024, 20:09
Дизайн