Переменные (практика)

Я не буду описывать здесь, какие есть переменные и как их создавать — это уже было описано в первой части. Рассмотрим переменную как объект.

Что есть переменная? Каждая переменная — что-то вроде листика, на который Вы записываете информацию, чтобы не забыть ее. Можно рассматривать переменную как объект, свойства которого — название и тип данных, которые можно в нее записать и значение, записанное в переменную. Действия, которые можно производить с переменными — создать, присвоить новое значение, прочитать значение переменной.

Начнем с переменных числового (и дробного) типа.
Для работы с числами в 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. Она позволяет выводить текстовые строки. Но мы не можем просто взять и вывести число, потому что у него нету такого действия (как у объекта, помните), такое действие есть только у строк.

Есть функции перевода числа в строку, которая берет как аргумент число, а возвращает строку с этим числом.

Примечание: важно понимать, что вроде бы очевидные вещи иногда нельзя сделать. Пример с числом идеально это показывает. С точки зрения компьютера строка — набор символов. Но мы обозначаем числа символами (поэтому иногда не сразу ясно — компьютер, в своем внутреннем представлении ничего ничем не обозначает — там другая логика), и называем это цифрами.

Для строки не имеет никакого значения, есть ли в ней цифры или нет — для неё это такие же символы, как и остальные. Поэтому и надо сначала сконвертировать число в цифры — набор символов.

Читайте также:  Warcraft 3 история оборотня

Выберите фукнцию 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 – строка

Читайте также:  Гайды world of warcraft wrath of the lich king

прим. для перевода значений из одного типа в другой есть специальные функции 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