У меня есть поле money у каждого игрока... А мне надо его превратив на 3 тип монету. Бронза Серебро Золото Когда у меня будет монета у игрока например 12902 то это будет 12 золото 90 серебро 2 бронза как то так выйдет. Не могу составить алгоритм. Не хочеться использовать 3 поля чтобы при покупки проверяли с 3 полями это много код. А 1 поле вполне хватит проверку если 100 монет стоит то купить если есть 100 монет это значит надо 1 серебра.
нужно просто знать внутренний курс. 1 Золотая = 10 Серебрянных 1 Серебрянная = 100 Бронзовых 1 Бронзовая = 100 Рублей(внутриигровая валюта например) тогда будет очень легко вычислять сколько у игрока монет в любом эквиваленте. и конвертировать их при операций купли/продажи инвентаря, артефактов и т.д. и поле для хранения останется только одно.
А ты у нас умный да?! Помочь тема значит помогай а не бред-ответ постить в тему! Добавлено спустя 32 минуты 54 секунды: Вот набросал пример пока он работает! А оптимального нету еще проще? Код (PHP): function getGold() { if(10000 > $this->money) { return 0; } return (int) substr($this->money, 0, -4); } function getSilver() { if(100 > $this->money) { return 0; } if(1000 > $this->money) { return (int) substr($this->money, -4, 1); } return (int) substr($this->money, -4, 2); } function getBronze() { if(100 > $this->money) { return (int) $this->money; } return (int) substr($this->money, -2); }
Код (PHP): header('Content-type: text/plain; charset=utf-8'); $money = 12902;//это будет 12 золото 90 серебро 2 бронза echo 'modey: ', $money, "\n"; $gold = (int)($money / 1000); echo 'gold: ', $gold, "\n"; $money = $money - $gold * 1000; $silver = (int)($money / 10); echo 'silver: ', $silver, "\n"; $bronze = $money - $silver * 10; echo 'bronze: ', $bronze, "\n";
YSandro, не правильно ведь! =) 1 голд это требует 100 серебра 1 серебра требует 100 бронза поэтому чуть поправил и уже лучше спасибо за помошь! =) Добавлено спустя 42 секунды: оставлю тут кому будет нужно если! Код (PHP): $money = 123456; $gold = (int)($money / 10000); echo 'gold: ', $gold, "\n"; $silver = (int)(($money - $gold * 10000) / 100); echo 'silver: ', $silver, "\n"; $bronze = ($money - $gold * 10000) - $silver * 100; echo 'bronze: ', $bronze, "\n";
YSandro, но это значит что бронза не может набрать 10 до 99 его как бы пропадет =) поэтому я его поправил... Добавлено спустя 50 секунд: Вот так стало проше спс а то математик чета из меня стало плохо! Код (PHP): public function getGold() { return (int)($this->_money / 10000); } public function getSilver() { return (int)(($this->_money - $this->getGold() * 10000) / 100); } public function getBronze() { return ($this->_money - $this->getGold() * 10000) - ($this->getSilver() * 100); }
Кстати, имя getBronze() может ввести в заблуждение в будущем, т.к. читается, будто нужно узнать, сколько бронзы будет стоить 12345 уе, например.
YSandro смысл блуждения? Сам класс получит каждый товар монету и сам выводит количество золото или серебро или бронзы!
ответили ж в первом же ответе. Куда ж больше-то. Добавлено спустя 1 минуту 40 секунд: один метод сделай, который массив возвзращает.
igordata, чтобы проверять условие если золото нет то скрываем и так далее! Добавлено спустя 22 секунды: если вернет 0 то условие не упустит а если массив то его пропустит так что!
так зачем их три если всё равно проверять три раза не проще ли вернуть сразу четыре значения: золото, серебро, медь и настоящее число ?
настоящего не нужно! =) так как везде исползует простое число монет и класс разделители монет типов для показов =)