JASS (Just Another Scripting Syntax)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 02:44, 22 мая 2016.
JASS
Парадигма скриптовый, событийно-ориентированный
Разработчики Blizzard Entertainment
Первый   появившийся 2001
Печать дисциплины статическая
Расширение файла .j, .ai.
Портал: None

JASS (англ. Just Another Scripting Syntax) - скриптовый язык с управляющими событиями API, созданный Blizzard Entertainment. Он широко используется в их играх Warcraft III (JASS2) и StarCraft (JASS) для скриптовых событий в игровом мире. Создатели карт могут использовать его в Warcraft III World Editor и Starcraft редакторах для создания сценариев для триггеров и ИИ (искусственный интеллект) в пользовательских картах и кампаниях. Blizzard Entertainment заменил JASS на Galaxy в Starcraft II.

Особенности

Язык предоставляет обширный API , который дает программистам контроль почти над каждым аспектом игрового мира. Он может, например, выполнять простые функции, такие как GUI: отдает приказы единиц, изменение погоды и времени суток, воспроизведения звуков и отображения текста у игрока и позволяет манипулировать местностью. JASS может также создавать мощные функции , такие как trackables, которая позволяет обнаружить , если мышь переходит или попадает в положение, GetLocalPlayer (), который может вызвать отсоединение при неправильном использовании (например, с помощью ручки с GetLocalPlayer ()). Он имеет синтаксис , похожий на Turing и Delphi , но в отличие от этих языков, он чувствителен к регистру. JASS прежде всего использует понятие процедурного программирования, также добавили C ++ для объектно-ориентированного программирования.

Типы

JASS является статически типизированных , и ее типы можно разделить на два класса: natives и handles. Natives типы:

  • integer (32-разрядное знаковое)
  • real (числа с плавающей точкой 32-разрядные, подобные типа поплавка в Java )
  • string (ограничение 1023 знаков, на самом деле, чтобы обеспечить сохранение / совместимость нагрузки это необходимо использовать только знаки 1013)
  • boolean
  • code

Все остальные типы считаются non-native. Native типы ведут себя подобно примитивным типам в других языках программирования. Handles типы, однако, ведут себя скорее как объекты . Handles типы часто представляют собой "объект" в игре (единицы, игроки, специальные эффекты и т.д.). Подобно тому , как Java обрабатывает объекты, все переменные и параметры в JASS handles типов рассматриваются как значения, но в действительности эти ценности не являются ничем , кроме как ссылок на объекты handles. Это становится важным , когда речь идет о сборке мусора , так как handles, если очищены не должным образом, могут вызвать серьезные проблемы с производительностью. Кроме того, локальные переменные не правильно разыменовываются handles, когда они выходят из области видимости. Если они не будут аннулированы должным образом, сбор мусора обрабатывать индексы не будет и в конечном итоге будут утечки. Кроме того , любые ссылки на handles сами по себе занимают некоторое пространство памяти. Пользователи могут привести к снижению производительности , если они не аннулированы, хотя и в гораздо меньших масштабах.

function garbage_Collection_Example takes string effectPath, real x, real y returns nothing
 local effect specialEffect = AddSpecialEffect( effectPath, x, y )
endfunction

function garbage_Collection_Example2 takes string effectPath, real x, real y returns nothing
 local effect specialEffect = AddSpecialEffect( effectPath, x, y )

 set specialEffect = null 
endfunction

function garbage_Collection_Example3 takes string effectPath, real x, real y returns nothing
 local effect specialEffect = AddSpecialEffect( effectPath, x, y )

 call DestroyEffect( specialEffect ) 
 set specialEffect = null
endfunction

function garbage_Collection_Example4 takes effect e returns nothing
  call DestroyEffect( e )
endfunction

Известные проблемы

Интерпретатор JASS из Warcraft III до версии 1.23 не проверял границы области памяти. Это позволяло выполнить произвольный байткод через карту, а это означает, что практически все, в том числе и вредоносные программы (вирусов, троянов и т.д.), может быть сконструировано в карту, которая будет выполнена и заразить компьютер. Blizzard Entertainment знают об этой проблеме.

Пример

Следующая функция создает строку , содержащую сообщение " Hello, world! " и отображает его для всех игроков:

function Trig_JASS_test_Actions takes nothing returns nothing
 call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Hello, world!")
endfunction

или если вы хотите это только для одного игрока:

function Trig_JASS_test_Actions takes player p returns nothing
 call DisplayTextToPlayer(p, 0,0, "Hello, world!")
endfunction

JASS поддерживает одномерные массивы любого типа. Синтаксис объявляет массивы и члены доступа в массиве и описывается в приведенном ниже коде.

function array_Example takes nothing returns nothing
  //arrays cannot be initialized at declaration and their members will hold arbitrary values
  local integer array numbers
  local unit array units
  local boolean array booleans
  local integer i = 1  set numbers[0] = 1 
  set units[0] = CreateUnit( 'hfoo', 0, 0 )   loop
    exitwhen ( i > 8191 ) 
    set numbers[i] = i   
    set units[numbers[i]] = null 
    set booleans[i-1] = true 
    set i = i + 1 
  endloop  if booleans[200] then 
    set numbers[200] = -200
  endif
endfunction

Ссылки

  1. An Introduction To JASS
  2. vJASS - Uncomplicating the Complicated
  3. JASS Tools
  4. Jass New Generation Pack (JNGP)
  5. vrJASS