Переменные (практика)
Я не буду описывать здесь, какие есть переменные и как их создавать — это уже было описано в первой части. Рассмотрим переменную как объект.
Что есть переменная? Каждая переменная — что-то вроде листика, на который Вы записываете информацию, чтобы не забыть ее. Можно рассматривать переменную как объект, свойства которого — название и тип данных, которые можно в нее записать и значение, записанное в переменную. Действия, которые можно производить с переменными — создать, присвоить новое значение, прочитать значение переменной.
Начнем с переменных числового (и дробного) типа.
Для работы с числами в WE есть два типа переменных: integer и real.
В переменные типа integer можно записать целые числа (для не математиков напоминаю: это числа без дробной части, но не только положительные, но и отрицательные).
Если Вы попытаетесь записать в переменную целого типа число с дробной частью (это вообще говоря некорректная операция) в WE никаких ошибок не будет. Просто в переменную будет записано значение без дробной части.
Самоучитель по редактору WarCraft 3, переменные
Например, если в переменную i целого типа Вы попытаетесь записать дробь 1 / 3, то в результате туда будет записан 0 (1 / 3 округляется, получается 0). Если 5 / 4 — то в i будет записана 1.
Другой тип — real — рациональные числа (дроби). В WE такие числа записываются как десятичные дроби. Хотя при желании Вы можете записать в переменную типа real и целое число (без дробной части).
Посмотрим, какие значения можно помещать в числовые переменные.
Войдите в WE, начните новый сценарий, сотрите все триггеры. Создайте переменную i типа integer и переменную r типа real.
Далее создайте триггер с событием Map Initialization. Создайте действие set variable. В качестве первого параметра нужно указать переменную, значение которой мы изменяем. Укажите переменную i. Второй параметр — какое значение мы хотим установить переменной. Когда Вы нажмете на него, Вам будет выдано окно, где будет предложено выбрать один из трех вариантов:
- Variable (переменная)
- Function (функция)
- Value (значение)
Итак, Вы можете присвоить одной переменной значение другой переменной (ну скажем set a = b — в переменной a будет записано такое же значение, как в b).
Другой вариант — написать конкретное значение, которое Вы хотели бы присвоить переменной — введите его в пункте Value.
И, наконец, третий пункт — функции. В списке функций будут все функции Варкрафта, которые возвращают integer. Как работают функции и выражение уже было описано в это статье.
Однако один момент надо все-таки рассказать. Поясню на примере. Например, мы решили переменной i присвоить значение равное 12 — 5. Для этого надо воспользоваться функцией (а не написать в поле Value!) Arithmetic!
Примечание: хотя Arithmetic по синтаксису триггеров — функция, на самом деле это не так. В JASS скрипте будет написано по-нормальному, т. е. само выражение. Поэтому «функция» Arithmetic «нормальна» с точки зрения оптимизации.
World editor warcraft 3 гайд [Переменные/таблицы/управление спецэффектами]
Реально у Blizzard не было другого выхода — не заставлять же писать выражения на JASS’е, учитывая что знать его будет не больше 2% всех мапперов?
Если все было сделано правильно, то действие будет выглядеть так:
Set i = (12 — 5)
Вопрос: как нам установить значение переменной i, чтобы она была равна 12 — 5 + 3, т. е. не два, а три слагаемых? Для этого снова пользуемся функцией Arithmetic: в качестве первого параметра выбираете снова функцию Arithmetic, и как её параметры ставим 12 — 5. В качестве второго параметра вводим 3. Не забудьте про знаки, конечно. Если все сделано верно, действие будет выглядеть так:
Set i = ((12 — 5) + 3)
Такой способ ввода значений весьма неудобен. Но что поделать, приходится пользоваться тем, что есть.
Достаточно часто используется такой прием:
Set i = (i + 1)
Что произойдет после выполнения этого действия? Значение переменной i увеличится на единицу, каким бы оно не было раньше.
Это нам говорит о том, что можно использовать значение самой переменной (которой присваивается значение) в выражении.
Когда Вы создадите действие set variable, но в качестве первого параметра выберете переменную r (типа real), Вам будет предоставлен другой набор функций, уже не будет тех, что возвращают integer (хотя я и говорил, что значение автоматически конвертируется — функций в списке нет). Но есть функция конверции из integer’а в real.
Как видите всяких действий с числами в WE можно производить предостаточно. Можно было бы даже использовать его как калькулятор 🙂
В обычных сценариях не так уж часто приходится пользоваться всеми этими функциями, но на самом деле они открывают картостроителю многие возможности. Поэтому нужно уметь с ними работать.
Давайте решим такую задачу: поместим в переменную r значение 100 + ((случайное число от 1 до 10) / 5).
Set i = (100 + ((Random integer number between 1 and 10) / 5))
Допустим, перед нами стоит задача: задать переменной i значение 1 + 2 + 3 + 4 + 5 + . + 10, т. е. слагаемых много. Если каждый раз делать арифметическую функцию — потратите много времени и сил, чтобы все сделать правильно и нигде случайно не ошибиться. Можно схитрить: записать действие не в одну, а в несколько строк.
Скопировать в буфер
Set i = (i + 1) Set i = (i + 2) Set i = (i + 3) Set i = (i + 4) Set i = (i + 5) Set i = (i + 6) Set i = (i + 7) Set i = (i + 8) Set i = (i + 9) Set i = (i + 10)
В итоге в переменной i будет записано нужное нам значение, но каждую строку не обязательно переписывать — можно просто скопировать и немного изменить ее (или воспользоваться циклом, о чем чуть позже).
А можем ли мы просмотреть, какое значение у какой-нибудь числовой переменной? Можем. Вы уже знакомы (я надеюсь) с действием game — text message. Она позволяет выводить текстовые строки. Но мы не можем просто взять и вывести число, потому что у него нету такого действия (как у объекта, помните), такое действие есть только у строк.
Есть функции перевода числа в строку, которая берет как аргумент число, а возвращает строку с этим числом.
Примечание: важно понимать, что вроде бы очевидные вещи иногда нельзя сделать. Пример с числом идеально это показывает. С точки зрения компьютера строка — набор символов. Но мы обозначаем числа символами (поэтому иногда не сразу ясно — компьютер, в своем внутреннем представлении ничего ничем не обозначает — там другая логика), и называем это цифрами.
Для строки не имеет никакого значения, есть ли в ней цифры или нет — для неё это такие же символы, как и остальные. Поэтому и надо сначала сконвертировать число в цифры — набор символов.
Выберите фукнцию convertion — convert real to string (перевести рациональное число в строку) — и в качестве числа укажите переменную r. Если же хотите посмотреть переменную i, выберете функцию convertion — convert integer to string и в качестве числа аргумента укажите переменную i.
Объяснять все эти вещи непросто, хоть они и являются достаточно простыми. Нужно просто понять, самому поработать с переменными. Поэтому даю задание (делать только тем, кто не умеет работать с переменными):
- Создать минисценарий с переменными a, b, d типа real, c типа integer
- В переменную a поместить ((случайное число от 1 до 10) + 5 / 2).
- В переменную b поместить 2^4 (два в четвертой степени).
- В переменную c поместить 1 — 2 — 3.
- В переменную d поместить наибольшее из чисел a и b.
- Вывести значение всех переменных на экран.
- Структура триггера: события, условия и действия
- Переменные, выражения, функции
- Основные операторы
- Объекты
- Постановка задач
- Переменные (практика)
- Циклы (практика)
- Массивы (практика)
Источник: xgm.guru
Warcraft 3 что такое переменные
Для работы с jass’ом достаточно обычного word editor’a, но я настоятельно рекомендую скачать Jass New Gen Pack 5 extreme edition. Именно эта версия необходима для работы cjass’a (прим. для vjass’a сойдет любой JNGP), даже если вы не собираетесь учить cjass, на нем написано много систем и для их импорта вам он потребуется.
Объяснять что такое переменная, думаю, смысла нет т.к. те, кто решил изучить jass, наверняка уже копались в редакторе переменных и знают что это.
Область видимости переменных
Область видимости переменной это то, откуда можно пользоваться этой переменной. Бывает два разных вида:
1) Глобальные переменные – переменные, которые можно использовать в любом месте в пределах карты. Это и есть те переменные, которые создаются в редакторе переменных. Переменные созданные в редакторе переменных имеют приставку udg_ т.е. если вы создадите в редакторе переменных переменную с названием point, то на самом деле она будет называться udg_point.
2) Локальные переменные – это переменные, которые можно использовать только внутри функции, в которой они были созданы. Они создаются в момент вызова функции и уничтожаются, когда функция заканчивает свою работу. Создать локальную переменную можно следующим образом:
local <тип переменной>
local integer i
local unit u
Имя переменной может содержать буквы, цифры и знак подчеркивания, но начинаться должно обязательно с буквы.
Присвоение значения переменным
Для присвоения значений переменным требуется напечатать вот что:
set <имя переменной>=
set I = 10
Можно присваивать значение переменным при создании:
local real Pi = 3.14
Массив это набор переменных одного типа, для объявления массива используется ключевое слово array:
local <тип переменной>array
local integer array numbers
Для присвоения значения ячейки массива:
set <имя переменной>[] =
set numbers[0] = 12
set numbers[3] = 65
Нумерация ячеек массива начинается с 0. Максимально число ячеек 8192 (не забываем, что начинается с 0, так что последняя ячейка 8191-ая). Для глобальных массивов нужно при создании указывать размер, локальные же всегда имеют 8192 ячейки.
Типы переменных
Типы переменных можно разделить на 2 группы:
integer – целочислительная
real – реальная
boolean – не знаю как это адекватно перевести на русский поэтому просто буль. =) Может принимать только 2 значения true (истина) и false (лож).
String – строка
прим. для перевода значений из одного типа в другой есть специальные функции R2I (real to integer), I2R (integer to real), I2S (integer to string), R2S (ну думаю догадаетесь)
2) Переменные-объекты – это все остальные типы переменных (unit, effect, location etc…). В отличии от простых типов, они хранят не значение, а ссылку на объект в памяти. Эти переменные необходимо правильно удалять иначе в памяти остается мусор и когда мусора становится слишком много, игра начинает тормозить. Сначала необходимо удалить объект из памяти специальной функцией.
Для каждого типа есть своя функция которая начинается либо с Remove либо с Destroy (RemoveUnit, DestroyEffect…). После того как удалили объект необходимо обнулить ссылку на него иначе от нее тоже останется мусор. Делается это так:
set myeffect = null
прим. null означает нуль или ничего.
Обнулять ссылки необходимо только для локальных переменных, т.к. при выходе из функции вы уже не сможете обратиться к локальной переменной и соответственно присвоить ей другое значение (другую ссылку на объект) тоже не сможете.
прим. Юниты и декорации при смерти удаляются из памяти (но не мгновенно).
Заключение
Возможно кое-что (а может и много чего) из написанного новичку покажется непонятным, но это не беда. Сейчас главное усвоить информацию про локальные переменные и запомнить на будущее, что переменные-объекты могут нагадить в память.
Источник: wc3-maps.ru
Warcraft 3 что такое переменные
Сообщений: 58
Статус: Offline
Таким образом, мы объявили переменную. У этой переменной нет никакого значения, поэтому она является не инициализированной. Можно задать значение этой переменной при ее создании. Присвоение переменной значения – называется инициализацией переменной, а переменная будет называться инициализированной переменной. Вот таким образом объявляется инициализированная переменная.
Все аналогично и с другими типами переменных.
new Edik = 25;
Вещественная переменная или переменная вещественного типа может хранить в себе только числа с плавающей точкой (десятичные числа). Переменная данного типа объявляется следующим образом:
new Float:Edik = 25,3;
Таким образом, мы объявили инициализированную переменную вещественного типа со значением – 25,3. При объявлении вещественной переменной, перед именем переменной всегда пишется приставка Float:. Ну и остался последний тип переменных – логический. Логическая переменная или переменная логического типа может хранить в себе только два логических значения «истина» — эквивалентна «1» и «ложь» — эквивалентна «0». Такой тип переменных логично использовать, если значение переменной, которую вы будете использовать, будет принимать только два значения. Объявляется переменная данного типа следующим образом:
new bool: Edik = true;
Заметьте, что переменной присвоено значение «true», что значит – истина, и наоборот «false» — если ложь. Для логических переменных должны присваиваться именно такие значения: true или false. Если при объявлении переменной ее заранее не проинициализировать, то значение этой переменной будет – false. При объявлении логической переменной перед именем переменной обязательно должна быть приставка bool:.
Переменные также могут быть глобальными и локальными. Глобальные переменные, это переменные, к которым можно обратиться из любой части кода, а локальные переменные, это переменные которые находятся внутри тела функции, то есть в фигурных скобках и доступны только внутри этой функции. К локальной переменной нельзя обратиться из другой функции или части кода. Нижеприведенный пример наглядно демонстрирует, эти два типа переменных:
Источник: cheat-master.ru