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

Материал из Chaotic Onyx
Перейти к навигацииПерейти к поиску
м
м (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