JASS (Just Another Scripting Syntax)
Последнее изменение этой страницы: 02:44, 22 мая 2016.
Парадигма | скриптовый, событийно-ориентированный |
---|---|
Разработчики | 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
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.