Понедельник, 25 Ноября 2024, 06:11

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Ограничение числа в определенном промежутке?
AntiAlianKillerДата: Понедельник, 22 Декабря 2014, 17:22 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Как ограничить число в определенном диапазоне значений? например, от 0 до 100.
При этом все должно происходить внутри 1-го условия, например:
КАКАЯ-ТО_ФУНКЦИЯ(MIN,MAX,ЗНАЧЕНИЕ) или
КАКАЯ-ТО_ФУНКЦИЯ(-10,10,random(101)-50).

Нашел. Функция CLAMP(VALUE,MIN,MAX).


╔Искусственный интеллект - EVAbot
╠Убийственная музыка - EpicMus
╠Roguelike - Watcher of Dungeon
╠Однокнопочная стратегия - One Button Epic Battle
╠Он-лайн шутер - You Can Not win
╠Текстовый квест - TimeLess
╚Уникальный кликер - MineClick


Сообщение отредактировал AntiAlianKiller - Понедельник, 22 Декабря 2014, 17:23
Nick_RimerДата: Понедельник, 22 Декабря 2014, 21:40 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
AntiAlianKiller, я не совсем понимаю суть ограничения таким способом, можешь пояснить СМЫСЛ этой операции? (Принцип работы функции объяснять не надо, знаю, что такое clamping). Но почему, например, не устраивает конструкция floor(random(101)). Тоже ведь от 0 до 100. Не больше и не меньше.

- Доброе утро, Агент Пи!
AntiAlianKillerДата: Вторник, 23 Декабря 2014, 16:48 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Когда я делал проект MINECLICK я наткнулся на такую проблему, что некоторые выражения выводили отрицательные результаты, что производило баги. вот я и хотел ограничить результат в диапазоне от 0 до 2^64-1, чтобы такого не было.

Баг возникал, например, здесь:

(round(clamp(((global('Dammage')*global('BonusAuto'))-global('DEF')),0,global('HPmax'))*global('Speed')/global('HPmax')*global('MoneyAdd')*10)/10)

Без клэмпа он выводил неправильные значения.

Добавлено (23 декабря 2014, 16:48)
---------------------------------------------

Цитата Nick_Rimer ()
Но почему, например, не устраивает конструкция floor(random(101)). Тоже ведь от 0 до 100. Не больше и не меньше.


floor(random(101)) -> от 0 до 100. Зачем нужен флур? К чему сокращать и без того целое число? Можно было бы писать сразу random(101).

clamp(-10,10,random(101)-50) -> от -10 до 10, хотя генерирует от -50 до 50.


╔Искусственный интеллект - EVAbot
╠Убийственная музыка - EpicMus
╠Roguelike - Watcher of Dungeon
╠Однокнопочная стратегия - One Button Epic Battle
╠Он-лайн шутер - You Can Not win
╠Текстовый квест - TimeLess
╚Уникальный кликер - MineClick


Сообщение отредактировал AntiAlianKiller - Вторник, 23 Декабря 2014, 16:44
Nick_RimerДата: Среда, 24 Декабря 2014, 23:03 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
AntiAlianKiller, может быть буду несколько кэпом, однако не всегда random(x) возвращает целое x. Точнее, не "не всегда", а "не везде". Конкретно - в С2.
В СС - да! Чётко целое, как ты и написал:
Цитата
Можно было бы писать сразу random(101).


А вот в С2 - хрен там! Сначала делается рандомная целая часть числа, а затем на фигову тучу знаков после запятой - рандомная вещественая часть числа. Так то! Я первый раз чуть не охренел, почему у меня ничего не работает без округлений в С2.
А почему нужно пользоваться именно floor(x) - не хочу писать здесь больше, чем уже когда-то писал ВОТ ТУТ.

В общем, конечно, если ты делаешь игру на СС, то ты прав, можно без флора. Если С2 и нужно целое число - с флором.
В любом случае я сломал мозг, глядя на твою формулу biggrin


- Доброе утро, Агент Пи!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг