Сейчас 12:56:37 Вторник, 23 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [JASSфак] Лекция 3. Условия.
[JASSфак] Лекция 3. Условия.
[DUОS]Дата: Понедельник, 23 Ноября 2009, 17:35:48 | Сообщение # 1
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
В JASS структура условий такова:

if (условие) then
  //Действия после удовлетворения условия.
else
  //Действия, которые выполняются, если условие не удовлетворено.
endif

Привожу простой пример. Допустим, нам нужно сделать следующее: если переменная i равна 5, то прибавить к её значению 3, в противном случае отнять от значения 2. В коде это будет выглядеть так:

if (i == 5) then
  set i = i + 3
else
  set i = i - 2
endif

Для того, чтобы сказать условию "равно", нужно ставить двойное равно, одинарное не воспринимается. Ниже даю все знаки сравнения:

== - равно
!= - не равно
>= - больше или равно
<= - меньше или равно
> - больше
< - меньше

Теперь оптимизируем наше условие. Допустим, что нам не нужно ничего делать, если условие не выполняется. Тогда вы можете написать так:

if (i == 5) then
  set i = i + 3
else
  call DoNothing()
endif

Однако вы не оптимизировали код. С ним можно сделать 2 действия:
- Убрать call DoNothing(), она ничего не делает.
- Убрать else, т.к. мы не хотим ничего делать, если условие не выполняется.
Получим:

if (i == 5) then
  set i = i + 3
endif

Отдельно расскажу об операторах and и or.
and означает, что для удовлетворения условия должны выполняться все условия. Приведём такой пример: если переменная i равна пяти, а переменная b меньше двух, то прибавить к переменной i три. Код будет таким:

if(i == 5 and b < 2) then
  set i = i + 3
endif

or означает, что для удовлетворения условия должно выполниться хотя бы одно из них. Приведём такой пример: если переменная i равна пяти или переменная d меньше 140, то прибавить к переменной i три. Код будет таким:

if(i == 5 or d < 140) then
  set i = i + 3
endif

Если вы хотите сделать условие в действиях при неудовлетворении условия, то используйте elseif. Приведём тот же пример: если переменная i равна пяти или переменная d меньше 140, то прибавить к переменной i три, в противном случае, если i равна четырём, добавить к значению i пять. Код будет такой:

if(i == 5 or d < 140) then
  set i = i + 3
elseif(i == 4) then
  set i = i + 5
endif

На сегодня лекция закончена. Спасибо за внимание.
Задание:
Потренироваться в условиях и сделать ваш очередной шарж. Жду работ!


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)


Сообщение отредактировал [DUОS] - Понедельник, 23 Ноября 2009, 17:48:26
 

СорнемусДата: Понедельник, 23 Ноября 2009, 17:42:53 | Сообщение # 2
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
А как же elseif? :)
 

[DUОS]Дата: Понедельник, 23 Ноября 2009, 17:48:51 | Сообщение # 3
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Сорнемус,
Ой, забыл ^^. Пасиб. Откорректил.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

AkvariumДата: Понедельник, 23 Ноября 2009, 21:51:03 | Сообщение # 4
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
Quote (|DUОS|)
== - равно
!= - не равно
>= - больше или равно
<= - меньше или равно
> - больше
< - меньше

Плагиат с С++)
Сейчас подумаю...Чем бы "ошаржить"


 

[DUОS]Дата: Понедельник, 23 Ноября 2009, 21:52:58 | Сообщение # 5
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (Akvarium)
Плагиат с С++)

Akvarium,
Варик написан на С++


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

AkvariumДата: Понедельник, 23 Ноября 2009, 21:57:39 | Сообщение # 6
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
[DUОS], угу. Но можно было бы и "соригиналить"

 

СорнемусДата: Понедельник, 23 Ноября 2009, 22:17:41 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (|DUОS|)
Akvarium, Варик написан на С++

Вобще-то на С.
Quote (Akvarium)
Но можно было бы и "соригиналить"

Как?) Кодировать? D:
 

AkvariumДата: Понедельник, 23 Ноября 2009, 23:21:30 | Сообщение # 8
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
Code

function Map takes nothing returns rect
     return bj_mapInitialPlayableArea
endfunction
function Un takes nothing returns group
     return GetUnitsInRectMatching(Map(), null)
endfunction
function St takes nothing returns string
return SubString(GetEventPlayerChatString(), 0, 1)
endfunction
function Trig_ini_Actions takes nothing returns nothing
local string s = St()
local integer i = S2I(s)
local integer g = 0
local rect r = Map()  
local group v = Un()
local unit u
if (i != 0) then
loop
exitwhen g == i
set u  = GroupPickRandomUnit(v)  
call KillUnit(u)
set g = g +1
endloop
set g = 0
else
call DoNothing()
endif
endfunction
//===========================================================================
function InitTrig_ini takes nothing returns nothing
     set gg_trg_ini = CreateTrigger(  )
      call TriggerRegisterPlayerChatEvent( gg_trg_ini, Player(0), "", false )
     call TriggerAddAction( gg_trg_ini, function Trig_ini_Actions)
endfunction


Вот. Если че не так сори. Ща оч некогда.


 

HAPKOMAHДата: Вторник, 24 Ноября 2009, 22:23:16 | Сообщение # 9
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
По коду Akvarium. Слова if, then, else, endif присутствуют в правильном порядке.(Это такая оценка)
 

СорнемусДата: Вторник, 24 Ноября 2009, 22:51:49 | Сообщение # 10
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (Akvarium)
Вот. Если че не так сори. Ща оч некогда.

Смысл в функциях Map, Un, St?
Оффтоп:
HAPKOMAH, а ты кто? О_о
 

HAPKOMAHДата: Вторник, 24 Ноября 2009, 23:11:20 | Сообщение # 11
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
Я вместо Гугла.
А в коде только строчки по отдельности осмыслены, а вместе - первые шаги младенца.
 

DjimmДата: Среда, 25 Ноября 2009, 16:11:54 | Сообщение # 12
5 уровень
Группа: Проверенные
Сообщений: 117
Награды: 0
Репутация: 20
Блокировки:
Quote (|DUОS|)
Потренироваться в условиях и сделать ваш очередной шарж. Жду работ!

Сделал наработку спелла с использованием условий. Задание
 

H_A_PKДата: Среда, 25 Ноября 2009, 18:09:19 | Сообщение # 13
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
local integer i = 20
local integer d = 50
if(i < d or d > i) then
set i = i + 5
elseif(i == d) then
call AddXpHero(GetLastCheastUnit, i+d, true)
endif


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец


Сообщение отредактировал H_A_PK - Четверг, 26 Ноября 2009, 19:43:00
 

СорнемусДата: Среда, 25 Ноября 2009, 22:29:40 | Сообщение # 14
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
H_A_PK, выкладывай ДЗ в картах.

Добавлено (25-11-2009, 22:29)
---------------------------------------------
Что-то не очень выходит у меня =(
Вроде все нормально, ошибок нет. По дебаг-мессагам понял что трабл в событии динамического триггера. Но другое я подставить не могу =(
TriggerRegisterDialogButtonEvent не катит, ибо там 3 кнопки и подставить 1 я не могу.
Вот карта.

 

DragoNДата: Среда, 25 Ноября 2009, 23:38:44 | Сообщение # 15
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Quote (H_A_PK)
call DoNothing()

Quote (H_A_PK)
set i = 0
set d = 0

всё это надо выпилить


El Psy Congroo
 

H_A_PKДата: Четверг, 26 Ноября 2009, 00:52:51 | Сообщение # 16
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Dragon93, Выпилил )))

проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

DragoNДата: Четверг, 26 Ноября 2009, 15:24:48 | Сообщение # 17
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Quote (H_A_PK)
elseif(i == d) then

я пропустил
тогда за кампанию и это )


El Psy Congroo
 

HAPKOMAHДата: Четверг, 26 Ноября 2009, 16:52:34 | Сообщение # 18
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
Коли так, тогда еще и скобки убрать.
 

H_A_PKДата: Четверг, 26 Ноября 2009, 18:27:02 | Сообщение # 19
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Dragon93, может я хочу туда действие дать )))
просто в форуме его не написал ))


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

HAPKOMAHДата: Четверг, 26 Ноября 2009, 19:25:35 | Сообщение # 20
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
Quote (|DUОS|)
if (условие) then
//Действия после удовлетворения условия.
else
//Действия, которые выполняются, если условие не удовлетворено.
endif

Неправильно.
Условный оператор:
if условие then
    [{операторы}]
[{elseif условие then}]
    [{операторы}]
[else]
    [{операторы}]
endif
return внутри условного оператора разрешается.
Код в квадратных скобках необязательный, в фигурных - можно повторять.

Добавлено (26-11-2009, 19:25)
---------------------------------------------
H_A_PK, тогда вместо действия изволь оставить комментарий.

 

Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [JASSфак] Лекция 3. Условия.
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz