Итак, вот мы и подошли снова к самому математически сложному моменту в игре к расчету характеристик и редкости добавляемой карты. Если раньше мы только обсуждали формулы, то теперь нужно их выводить.
Однако, прежде чем их выводить, нужно определиться как именно будут указываться желаемые характеристики карты. Осторожно! Далее следует лютый матан. Я предупредил.
Я предложил указывать редкость карты в промежутке от 1 до 20. То есть, промежуток от 0 до 1 делится на 20 частей, затем, в зависимости от указанного числа, выбирается нужный промежуток, ищутся все существующие карты, редкость которых попадает в этот промежуток, генерируется новое уникальное значение редкости, и карта добавляется в базу данных с этим уникальным значением. И случайным образом (но в жестких рамках минимального и максимального значения каждой характеристики, а так же максимального и минимального значения суммы всех характеристик) генерируется набор характеристик для добавляемой карты.
Однако, для этого способа (да и для любого другого, подозреваю) нужно определиться с этими самыми минимальными и максимальными значениями каждой характеристики, и суммы характеристик. Приведу пример:
Мы задаем число 2 при добавлении. Промежуток редкости для 2: 0.05 0.1. Выбираются все карты, редкость которых в этом промежутке. Генерируем случайное значение от 0.05 до 0.1. Если сгенерированное значение уже есть генерируем до тех пор, пока не выпадет уникальное.
Далее. Для 2 редкости минимальное значение характеристики равно (к примеру) 8, максимальное 10. Минимальное значение суммы всех характеристик равно 50, максимальное 55. Делаем 6 бросков характеристик (значение каждой от 8 до 10). Подсчитываем сумму 6 сгенерированных характеристик. Если сумма больше или равна 50 и меньше или равна 55, то такой набор подходит. Проверяем, уникален ли такой набор характеристик (нет ли уже карты с таким же набором). Если уникален добавляем карту в базу данных. Если нет делаем броски до тех пор, пока не подберем уникальный набор.
---
Сложность подхода состоит в указании 20 разных (и обдуманных (то есть не с потолка, как в примере) минимальных и максимальных значений дла каждого промежутка).