Дайте заданий для пыхи

Meadwey

Некто
📜
Сообщения
37
Реакции
0
Циклы, массивы, хотелось бы попрактиковаться. Реализацию опубликую здесь. Можно логические выражения подключить или бд. Самое интересное это конечно бкшные механики. Накидывайте.
 

Meadwey

Некто
📜
Сообщения
37
Реакции
0
Вот к примеру недавно писал формулу защиты от урона, нихера не понятно, но очень интересно
Код:
/* Поглощение урона атаки в зависимости от кол-ва защиты */
function atak_absorb($user_defend, $enemy_atack) {
    $a = 100 / 75;
    
    if ($user_defend <= 250) {
        $absorb = $enemy_atack / 100 * ($user_defend / 5 );
}
        elseif ($user_defend > 250 && $user_defend <= 500){
           $absorb = $enemy_atack / 2 + (($enemy_atack / 4 /100) * ($user_defend - 250) / 2.5);
        }
                elseif ($user_defend > 500 && $user_defend <= 750){
           $absorb = $enemy_atack / $a + (($enemy_atack / ($a * 2) /100) * ($user_defend - 500) / 7.5);
           $absorb = (int)$absorb;
        }
    return $absorb;
}

var_dump(atak_absorb(750, 200));

Тех. зад.
• Показатели защиты указываются в единицах и процентах. Каждые 250 ед. увеличивает существующую защиту на 50% (т.е. при 250 ед. будет 50% защиты, при 500 - 75%, при 750 - 87.5%),
 

Meadwey

Некто
📜
Сообщения
37
Реакции
0
или вот расчет кулачки
Код:
//расчет кулачный урон
     $multy_min = 0.01;
     $multy_max = 0.02;
     $one_min = 1.06;
     $one_max = 1.03;
     $base_min = 2.40;
     $base_max = 4.41;
 
$stop_min = ($multy_min * $result["sila"]) + $one_min;
$sum_min = 0.00;
$i = $one_min;
while ($i < $stop_min) {
    $i += $multy_min;
    $sum_min += $i;
}
$min_yron = $base_min + $sum_min;// Мин урон на выходе
$min_yron = floor($min_yron);
$min_yron = (int)($min_yron);

$stop_max = ($multy_max * $result["sila"]) + $one_max;
$sum_max = 0.00;
$k = $one_max;
while ($k < $stop_max) {
    $k += $multy_max;
    $sum_max += $k;
}
$max_yron = $base_max + $sum_max;// Макс урон на выходе
$max_yron = floor($max_yron);
$max_yron = (int)$max_yron;

$hand_damage = ['min' => $min_yron, 'max' => $max_yron];
var_dump($hand_damage);

Задумка в том чтобы мултипликатор макс урона в прогрессиии был больше мин урона c шагом 0.01
 
Последнее редактирование:

Meadwey

Некто
📜
Сообщения
37
Реакции
0
вот так всегда на халяву предлагаешь написать никто не хочет.. а все потому что непонятно что с этим делать
 

Антон

Интересующийся
📜
Сообщения
139
Реакции
15
так ты предлагаешь на халяву написать какой нибудь модуль или же тебе нужна практика с циклами/массивами и т.д?)
В первом случае ты ничего годного для бк не сделаешь, потому что:
1. Те кто не шарят в кодинге, не поймут о чем вообще речь, что такое циклы/массивы/ветвления и т.д., а значит не смогут придумать и декомпозировать задачу, либо же не смогут в коде понять где тот или инной цикл херово отрабатывает чтоб дать тебе на разбор
2. Те кто шарят, им попросту эт не надо, потому что реализация алгоритмов с этими данными происходят на изи и куда легче самому написать чем тебе дать ТЗ, а потом еще и проследить логику, правильно ли она отрабатывает

ИМХО конечно же
 

Bayer

Специалист
⚖️
🏆
📜
Сообщения
835
Реакции
274
Не знаю, ну бахни матрицу, что бы числа шли змейкой(спиралью) от большего к меньшему

я ж так понял ты попрактиковаться хочешь
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,743
Реакции
561
БКшное? Запили динамический генератор бота. На вход уровень, на выход рандомный бот в одежде.
Ух, напрактикуешься...
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,743
Реакции
561
Вот к примеру недавно писал формулу защиты от урона, нихера не понятно, но очень интересно
Код:
/* Поглощение урона атаки в зависимости от кол-ва защиты */
function atak_absorb($user_defend, $enemy_atack) {
    $a = 100 / 75;
 
    if ($user_defend <= 250) {
        $absorb = $enemy_atack / 100 * ($user_defend / 5 );
}
        elseif ($user_defend > 250 && $user_defend <= 500){
           $absorb = $enemy_atack / 2 + (($enemy_atack / 4 /100) * ($user_defend - 250) / 2.5);
        }
                elseif ($user_defend > 500 && $user_defend <= 750){
           $absorb = $enemy_atack / $a + (($enemy_atack / ($a * 2) /100) * ($user_defend - 500) / 7.5);
           $absorb = (int)$absorb;
        }
    return $absorb;
}

var_dump(atak_absorb(750, 200));

Тех. зад.
• Показатели защиты указываются в единицах и процентах. Каждые 250 ед. увеличивает существующую защиту на 50% (т.е. при 250 ед. будет 50% защиты, при 500 - 75%, при 750 - 87.5%),


PHP:
if ($user_defend % 250 === 0) {
    $user_defend_percent = 50;
    for ($i = 2; $i <= $user_defend / 250; $i++) {
        $user_defend_percent *= 1.5;
    }
}

Не?


Смотрел на кулачку, ни слова в задании не понял. :)
 
Последнее редактирование:

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,743
Реакции
561
А нужно?) Я могу попробовать)
Я планирую у себя внедрить, но ещё дожить надо. Не, я представляю как это сделать и наработки где-то лежат. Чел хочет нетипичную задачу, пусть потрясёт мозгами.
 

DarksLight2

Знаток
⚖️
📜
Сообщения
453
Реакции
121
Я планирую у себя внедрить, но ещё дожить надо. Не, я представляю как это сделать и наработки где-то лежат. Чел хочет нетипичную задачу, пусть потрясёт мозгами.
А вообще многие бк создают прям новые аки в бд для этого, разве нельзя зделать там клас юзера и сделать его прототип? Разве так не будет проще?) так ще само и мобы, куча мобов в базе, сделайте один и порождайте их
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,743
Реакции
561
разве нельзя зделать там клас юзера и сделать его прототип? Разве так не будет проще?)
Это действительно не самая тривиальная задача. Когда мне понадобилось решение на коленке, я, типа, чтобы не хламить базу, построил всё на идее многомерных массивов, потом посмотрел на то что вышло и приуныл: просто сделал базу из файлов по сути. Получается, или делаешь готовые куклы (заводишь в БД) ли миришься с мобами у которых может быть разброс 1-800-4-23, 1-4-2-532, и тому подобное.

Но разработка такой дичи позволяет по новому посмотреть на систему поединков. Однажды приходит понимание, что поединок - это бой "сущностей". Конечных цифр. Причём далеко не тех, что у персонажа. И в поединке далеко не твои 30 силы соревнуются с 35 силы противника, а какие-то конечные результаты, в которых эта сила лишь переменная. Как результат, разработка бота в корне меняется. Генератор бота становится генератором конечных цифр: зачем считать формулы, статы, модификаторы, одежду, бафы, умения, приёмы, прочее, вся эта математика, если можно сразу сгенерировать результат? Поверх этого генерируется красивая, оторванная от реальности картинка - бот готов. И пофиг чем он ударит: когтями, дубиной матёрого огра +14 или деревянной поварёшкой - игрок никогда не узнает что под капотом. Разве что некоторые захотят как-то купить себе уникальную поварёшку за реал. :)

А класс юзера.. Я свой переписал раз пять и всё не найду никак идеального варианта. Может подскажешь?
У @oxy был интересный вариант, но он его продал и дропнул до того, как я разобрался в MVC, поэтому когда мог - смотрел на это как баран, а когда понял куда смотреть, там уже ничего не было. =)
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,743
Реакции
561
Когда я ещё не дошёл до мысли про конечный сущности, у меня был написан "на будущее" такой вот простенький генератор:
PHP:
function create_bot ($level): object
{
    $stats = [
        'str' => 10,
        'dex' => 10,
        'intu' => 10,
        'endu' => 10,
        'inte' => 10,
        'wis' => 10,
    ];
    
    $free_points = 3 + (2 * $level);
    
    while ($free_points > 0) {
        $stats[array_rand($stats)] += 1;
        $free_points--;
    }
    
    $obj = (object)[];
    
    foreach ($stats as $k=>$v){
        $obj->$k = $v;
    }

    //Бонус даётся только за стат выше 10.
    $obj->eva = $obj->dex - 10;
    $obj->acc = $obj->dex - 10;
    $obj->krit = $obj->intu - 10;
    $obj->maxHealth = round(($obj->endu * 3) + ($obj->endu / 2) * ($level - 1) + ($obj->endu / 5) * (($level - 1) * ($level - 2) / 2));
    $obj->maxMana = round(($obj->wis * 3) + ($obj->wis / 2) * ($level - 1) + ($obj->wis / 5) * (($level - 1) * ($level - 2) / 2));

    return $obj;
}
 
Сверху