DM Guide 16: различия между версиями

Материал из Animus
Перейти к навигацииПерейти к поиску
м
м (clean up)
Строка 1: Строка 1:
−
''Это 16-я глава перевода оригинального руководства по Dream Maker от разработчиков.''
 
  
−
[[All_about_the_code|Остальные главы руководства и статьи о программировании на коде BYOND от любителей на русском.]]
 
  
−
[http://www.byond.com/docs/guide/chap16.html Оригинальная 16-я глава руководства на английском языке]
 
  
−
==Глава 16: Математика==
+
[[Файл:LtJ6KqW6mKk.jpg|LtJ6KqW6mKk.jpg]]
−
 
+
[https://www.youtube.com/watch?v=wqpseZS3mD0 Конец прекрасной эпохи. Мы еще увидимся, я обещаю!]
−
Вы когда-нибудь задавались вопросом, почему математики на вас странно смотрят? Где-то в разрядах числа π сокрыт ваш личный дневник в обычном ASCII.
 
−
 
 
−
Базовые математические операторы уже были описаны [[DM_Guide_6#Математические операторы|в 6-ой главе]]. Предусмотрено много дополнительных математических функций для специфических целей. Они описаны в нижеследующих разделах.
 
−
 
 
−
===Генерация случайных чисел===
 
−
 
 
−
Случай играет большую роль во многих типах игр, так что DM предоставляет несколько способов генерации случайных чисел. На самом деле они все основаны на генераторе псевдослучайных чисел и только кажутся случайными. Однако, на практике, на них можно положиться для получения чисел без заметного закона распределения.
 
−
 
 
−
====rand====
 
−
 
 
−
''rand'' позволяет сгенерировать случайное число из заданного диапазона. Возвращаемое число всегда целое, так что если требуется дробное число, нужно задать больший диапазон и затем разделить результат.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| rand
 
−
| (L=0,U)
 
−
|-
 
−
|
 
−
| L - нижняя граница.
 
−
|-
 
−
|
 
−
| U - верхняя граница.
 
−
|-
 
−
|
 
−
| Возвращает число в диапазоне от L до U (включая L и U).
 
−
|}
 
−
 
 
−
Если задан только один аргумент, то он считается верхней границей, а нижней границей берется нуль.
 
−
 
 
−
Ниже следует пример кода «зелья игрока».
 
−
 
 
−
obj/potion/lucky
 
−
  verb/drink()
 
−
      usr.AddLife(rand(-20,20))
 
−
 
 
−
В зависимости от удачи пользователя, зелье может нанести 20 урона или восстановить 20 здоровья.
 
−
 
 
−
Этот код предполагает, что описана процедура ''AddLife()'', которая лечит или наносит урон мобу. Она аналогична процедуре ''HurtMe()'', описанной [[DM_Guide_6# Создание процедуры|в главе 6]], но с аргументом, взятым с обратным знаком
 
−
 
 
−
====prob====
 
−
 
 
−
''prob'' возвращает true или false с вероятностью, задаваемой в процентах.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| prob
 
−
| (P)
 
−
|-
 
−
|
 
−
| P – процентная вероятность возвратить true.
 
−
|-
 
−
|
 
−
| Возвращает 1 в P процентах случаев, в остальных возвращает 0.
 
−
|}
 
−
 
 
−
Она может быть использована для выбора одного из двух возможных результатов. В приведенном ниже примере, зелью дан небольшой шанс наложения на игрока отрицательного эффекта.
 
−
 
 
−
obj/potion/health
 
−
  verb/drink()
 
−
      if(prob(20)) //не повезет в 20% случаев
 
−
        usr.AddLife(-10)
 
−
      else
 
−
        usr.AddLife(20)
 
−
 
 
−
====roll====
 
−
 
 
−
''roll'' «кидает» несколько костей и возвращает «выпавшую» сумму. Грани костей пронумерованы от единицы и до заданного числа граней, выпадение каждой грани равновероятно.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| roll
 
−
| (dice=1,sides)
 
−
|-
 
−
| roll
 
−
| ("dicedsides")
 
−
|-
 
−
|
 
−
| dice – количество бросаемых костей.
 
−
|-
 
−
|
 
−
| sides – количество граней бросаемых костей.
 
−
|-
 
−
|
 
−
| Возвращает сумму выпавших на всех костях граней.
 
−
|}
 
−
 
 
−
Параметры костей могут быть заданы как два отдельных числовых аргумента или как одна текстовая переменная. Текстовое представление может быть полезно, если вы хотите сохранить параметры костей как одну переменную.
 
−
 
 
−
В следующем примере ''roll'' использована для подсчета урона оружия.
 
−
 
 
−
obj/weapon
 
−
  var/power
 
−
  clipboard
 
−
      power = "1d4"
 
−
  calculator
 
−
      power = "2d6"
 
−
  verb/swing(mob/trg in view(1))
 
−
      var/damage = roll(power)
 
−
      view() << "[usr] hits [trg] with \a [src] for [damage] point\s!"
 
−
 
 
−
И в программировании, и в бою вам приходится довольствоваться тем, что есть.
 
−
 
 
−
====pick====
 
−
 
 
−
''pick'' случайным образом выбирает один из её аргументов и возвращает его значение.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| pick
 
−
| (Val1,Val2,...)
 
−
|-
 
−
|
 
−
| Возвращает одно из заданных значений.
 
−
|}
 
−
 
 
−
Если вы хотите, что бы у определенного аргумента была большая или меньшая вероятность быть выбранным, задайте т.н. относительную вероятность. Относительная вероятность равная 200 означает, что аргумент будет выбираться в два раза чаще, при 50 – в два раза реже и т.д.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| prob (
 
−
| P); Val
 
−
|-
 
−
| или
 
−
| P; Val)
 
−
|-
 
−
|
 
−
| P – относительная вероятность (по умолчанию равна 100).
 
−
|-
 
−
|
 
−
| Val – значение с измененной вероятностью выбора.
 
−
|}
 
−
 
 
−
В нижеследующем примере ''pick()'' использована в коде печенья с предсказанием.
 
−
 
 
−
obj/fortune_cookie
 
−
  verb/eat()
 
−
      usr << "The message inside says:"
 
−
      usr << pick (
 
−
        "Never trust an undead doctor.",
 
−
        "Only trust undead lawyers.",
 
−
        prob(25)
 
−
        "The throne marks the way.",
 
−
        prob(10)
 
−
        "The wall behind the throne is an illusion!"
 
−
      )
 
−
      del(src)
 
−
 
 
−
В этом примере два сообщения имеют нормальную вероятность появления, одно четверть от нормальной вероятности и одно десятую часть. Заметьте, с ''prob()'' вместо точки с запятой может использоваться новая строка. Это позволяет выстраивать элементы по линии, если вы любитель этого дела.
 
−
 
 
−
===abs===
 
−
 
 
−
''abs''  вычисляет модуль числа.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| abs
 
−
| (N)
 
−
|-
 
−
|
 
−
| N – численное выражение.
 
−
|-
 
−
|
 
−
| В
 
−
|}
 
−
 
 
−
===min===
 
−
 
 
−
''min'' возвращает значение минимального из его аргументов.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| min
 
−
| (N1,N2,...)
 
−
|-
 
−
|
 
−
| N1 – первое численное выражение.
 
−
|-
 
−
|
 
−
| N2 – второе и последующие численные выражения.
 
−
|-
 
−
|
 
−
| Возвращает минимальное значение.
 
−
|}
 
−
 
 
−
===max===
 
−
 
 
−
''max'' возвращает значение максимального из его аргументов.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| max
 
−
| (N1,N2,...)
 
−
|-
 
−
|
 
−
| N1 – первое численное выражение.
 
−
|-
 
−
|
 
−
| N2 – второе и последующие численные выражения.
 
−
|-
 
−
|
 
−
| Возвращает максимальное значение.
 
−
|}
 
−
 
 
−
===round===
 
−
 
 
−
''round'' округляет число до ближайшего кратного заданному множителю. Если множитель не задан (или он равен нулю), возвращает целую часть. Обратите внимание, что при множителе равном 1, число ''округляется'' до ближайшего целого.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| round
 
−
| (N,M)
 
−
|-
 
−
|
 
−
| N – численное выражение, требующее округления.
 
−
|-
 
−
|
 
−
| M – множитель.
 
−
|-
 
−
|
 
−
| Возвращает ближайшее к N число кратное M.
 
−
|}
 
−
 
 
−
===sqrt===
 
−
 
 
−
''sqrt''  вычисляет квадратный корень числа. Эта операция эквивалентна возведению числа в степень ½ при помощи оператора **, представлена в таком виде для удобства.
 
−
 
 
−
{| border="0"
 
−
|-
 
−
| sqrt
 
−
| (N)
 
−
|-
 
−
|
 
−
| N – численное выражение.
 
−
|-
 
−
|
 
−
| Возвращает квадратный корень.
 

Версия от 00:05, 13 декабря 2016