Создание динамичной экономики в игре на PHP: от теории к реализации 🚀 | DevBlog_9

Реализация логики расчета цен

В мире разработки игр, экономика играет ключевую роль в создании захватывающего и увлекательного игрового процесса. Недавно я столкнулся с задачей усовершенствования системы торговли в моей игре, где покупка и продажа ресурсов имели фиксированное соотношение 1 к 1, влияя при этом на показатели параметров персонажа. Я решил внедрить более сложную логику, чтобы сделать экономику игры более динамичной и интересной.

Исходная задача ✨

Целью было создать систему, где:

  • Покупка ресурсов всегда была дороже их продажи.
  • Цены на ресурсы динамически менялись, основываясь на текущем спросе и предложении.
  • Влияние игроков на экономику становилось более заметным.

Для достижения этих целей было решено использовать данные из специально созданной таблицы resources_bank, которая отслеживала:

  • Количество купленных (resources_purchased) и проданных (resources_sold) ресурсов игроками.
  • Текущее количество каждого ресурса (current_quantity), доступное в игре.

Процесс разработки 🛠

Шаг 1: Структурирование данных

Была разработана модель данных ResourceModel с полями для отслеживания базовой цены, цены покупки и продажи для каждого ресурса, что позволило динамически управлять ценами.

Шаг 2: Реализация логики расчета цен

Логика расчета цен была основана на соотношении между текущим количеством ресурсов в игре (current_quantity), количеством купленных (resources_purchased) и проданных (resources_sold) ресурсов. Важным улучшением стало введение формулы, позволяющей цене покупки увеличиваться до 10 раз от базовой, если спрос высок, и уменьшаться до 0,6 от базовой цены при высоком предложении. Цена продажи устанавливалась ниже цены покупки на 5% до 12%, обеспечивая реалистичный баланс между стимулированием продаж и покупок.

public function updateResourcePrices() {
        $resources = $this->findAll();
        foreach ($resources as $resource) {
            $bankData = (new ResourcesBankModel())->where('resource_id', $resource['id'])->first();
            if ($bankData) {
                $currentQuantity = max($bankData['current_quantity'], 1); // Защита от деления на ноль

                $buyMultiplier = min(10, max(1, $bankData['resources_purchased'] / $currentQuantity * 10));
                $sellMultiplier = min(0.1, max(0.01, $bankData['resources_sold'] / $currentQuantity));

                // Рассчитываем итоговую цену покупки
                $finalBuyPrice = min(max($resource['price'] * $buyMultiplier, $resource['price']), $resource['price'] * 10);

                // Рассчитываем итоговую цену продажи с учетом процента от цены покупки
                $sellPriceAdjustment = rand(5, 12) / 100;
                $finalSellPrice = $finalBuyPrice - ($finalBuyPrice * $sellPriceAdjustment);

                // Обновляем цены в базе данных
                $this->update($resource['id'], [
                    'buy_price' => round($finalBuyPrice, 2),
                    'sell_price' => round($finalSellPrice, 2),
                ]);
            }
        }
    }

Шаг 3: Интеграция с торговлей

После расчета цен, система была интегрирована с функционалом торговли в игре, обеспечивая динамическое изменение цен в зависимости от текущих показателей current_quantity, resources_purchased, и resources_sold.

Результаты 🎉

Эта система позволила создать более живую и динамичную экономику в игре, где цены на ресурсы постоянно меняются, отражая реальные условия спроса и предложения. Игроки теперь могут ощутить более глубокое влияние своих действий на экономику игры, что делает игровой процесс более захватывающим и непредсказуемым.

Это лишь один из примеров, как можно использовать программирование для создания сложных и интересных механик в играх. Используя PHP и базы данных, мы смогли значительно улучшить игровой опыт, делая его более реалистичным и вовлекающим.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *