Сейчас 05:45:15 Суббота, 15 июня, 2013 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 3 из 3«123
Модератор форума: PUVer, SirNikolas, Ty3uK, Duosora 
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Интересная задачка!
Интересная задачка!
DuosoraДата: Пятница, 29 Март 2013, 21:03:42 | Сообщение # 1
The cats never sleep...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки:
Взято из урока JASS на The Hive Workshop. Автор - Nestharus.
Тому, кто её решит, могу дать +20 в репутацию. Задача того стоит. Если Николас поддержит, то сделаем награду выше.
edit: SirNikolas подкинет ещё +20.
edit2: Ty3uK ещё +10 выдаст.

Ваше задание - сделать следующие чатовые команды:
"-create (имя боевой единицы) [номер игрока]" - содержимое круглых скобок - обязательный параметр, содержимое квадратных - опциональный (но самих скобок в строке нет). Если номер игрока не указан, она создаётся для красного игрока (игрок 0). Боевых единиц надо создавать в координатах (0; 0) и как угол указывать 270 градусов. Пример: "-create peasant 11" должен создать работника для коричневого игрока.
"-remove [all|random]" - содержимое квадратных скобок - опциональный параметр. Если указан флаг all, то удаляются все созданные боевые единицы. Если указан флаг random, то нужно удалить одну случайную боевую единицу. Если флаг не указан, то удалить всех выделенных игроком боевых единиц. Пример: "-remove all" удалит всех боевых единиц.

Заметьте: вы можете создать до 5 боевых единиц. Если создано уже 5 и игрок просит создать ещё одну, то заменить существующую боевую единицу на ту, которую игрок попросил создать командой в чате.
Если боевые единицы не удаляются, а только создаются, то на каждой позиции боевая единица будет заменяться раз в пять команд.

Вы можете создать только 4 свои собственные переменные. Переменные, описанные ниже, не входят в число этих четырёх.
  • Вы можете объявить дополнительную переменную для хранения подстрок типа string;
  • Вы можете объявить дополнительную переменную типа string, чтобы отловить вводимое сообщение;


Если игрок вводит сообщение, которое содержит вообще не чатовую команду или криво введённую чатовую команду, выводить ему сообщение такого вида:
"Введённый игроком текст*
-------------------------------------------------------------------
ERROR: Invalid Input
-------------------------------------------------------------------"
ERROR - красным цветом;
Введённый игроком текст - синим цветом;
всё остальное - зелёным цветом.

Когда вы сохраняете боевую единицу в переменную, поставьте её в координате X, отличающуюся на 128 от координаты предыдущей боевой единицы. Боевые единицы ставятся слева направо, максимум 5 боевых единиц.
Не должно быть "дырок"! Если в данный момент на карте находится 4 боевых единицы, то самая крайняя правая позиция должна быть пустой!
Используйте ClearTestMessages(), чтобы очистить экран от сообщений об ошибке.

Можно использовать только язык Jass2. Диалекты не допускаются.
Можно использовать только локальные переменные и условия, а также вызывать любые функции кроме SetUnitUserData, SetItemUserData и все функции, связанные с кэшем и хэш-таблицами.
Можно создать только одну переменную-массив!
Нельзя всё остальное, в том числе создавать циклы или писать собственные функции.

edit: Пояснение на вопрос от VasyaBaratrum: В игре находится только один игрок - красный!
edit2: Нет, я не дам решение.


[ Русские триггеры ]



Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл
Те, кто читает книги, всегда будут управлять теми, кто смотрит телевизор. © В. Пелевин
 

MuradorДата: Пятница, 05 Апрель 2013, 20:08:23 | Сообщение # 51
Группа: Проверенные
Сообщений: 1234
Награды: 1
Репутация: 403
Блокировки:
дуос, объясни, в чем сложность сей задачи?
может есть подвох которого я не вижу, но я раз 10 перечитал =\ и не нашел его
 

BlackFoxiДата: Суббота, 06 Апрель 2013, 09:18:18 | Сообщение # 52
2 уровень
Группа: Пользователи
Сообщений: 21
Награды: 0
Репутация: 10
Блокировки:
Murador, подвох в том, что решение должно прославлять Дуоса. Написано что можно использовать call if else elseif endif local и нельзя все остальное, в том числе loop function set. А как же без set?
Решение с тремя переменными. Дуос лесом, интерес спортивный.
Код

function main takes nothing returns nothing
     local trigger trgInSz
     local unit array unitsz
     local group gAz
     if GetEventPlayerChatString() == null then
          set trgInSz = CreateTrigger()
          call TriggerRegisterPlayerChatEvent( trgInSz, Player(0), "", false )
          call TriggerAddAction( trgInSz, function main )  
     else
          set gAz = CreateGroup()
          call GroupEnumUnitsInRange(gAz,0.0,0.0,66.6,null)
          set unitsz[0] = FirstOfGroup(gAz)
          call GroupClear(gAz)
          call GroupEnumUnitsInRange(gAz,128.0,0.0,66.6,null)
          set unitsz[1] = FirstOfGroup(gAz)
          call GroupClear(gAz)
          call GroupEnumUnitsInRange(gAz,256.0,0.0,66.6,null)
          set unitsz[2] = FirstOfGroup(gAz)
          call GroupClear(gAz)
          call GroupEnumUnitsInRange(gAz,384.0,0.0,66.6,null)
          set unitsz[3] = FirstOfGroup(gAz)
          call GroupClear(gAz)
          call GroupEnumUnitsInRange(gAz,512.0,0.0,66.6,null)
          set unitsz[4] = FirstOfGroup(gAz)
          call DestroyGroup(gAz)
          set gAz = null
          call ClearTextMessages()
          if SubString(GetEventPlayerChatString(),0,8) == "-create " then
             if SubString(GetEventPlayerChatString(),StringLength(GetEventPlayerChatString()) - 3,StringLength(GetEventPlayerChatString()) -2) == " " then
                 set unitsz[5]=CreateUnitByName(Player(S2I(SubString(GetEventPlayerChatString(),StringLength(GetEventPlayerChatString())-2,StringLength(GetEventPlayerChat String())))), SubString(GetEventPlayerChatString(),8,StringLength(GetEventPlayerChatString())-3), 512., 0., 270.0)
             elseif SubString(GetEventPlayerChatString(),StringLength(GetEventPlayerChatString()) - 2,StringLength(GetEventPlayerChatString()) -1) == " " then
                 set unitsz[5]= CreateUnitByName(Player(S2I(SubString(GetEventPlayerChatString(),StringLength(GetEventPlayerChatString())-1,StringLength(GetEventPlayerChatS tring())))), SubString(GetEventPlayerChatString(),8,StringLength(GetEventPlayerChatString()) -2), 512.0, 0., 270.0)
             else
                 set unitsz[5]= CreateUnitByName(Player(0), SubString(GetEventPlayerChatString(),8,StringLength(GetEventPlayerChatString())), 512.0, 128., 270.0)
             endif
             if unitsz[5] != null then
                 call PauseUnit(unitsz[5],true)
                 if GetUnitTypeId(unitsz[4]) != 0 then
                     call RemoveUnit(unitsz[0])
                     call SetUnitX(unitsz[1],0.0)
                     call SetUnitX(unitsz[2],128.0)
                     call SetUnitX(unitsz[3],256.0)
                     call SetUnitX(unitsz[4],384.0)
                 elseif GetUnitTypeId(unitsz[0]) == 0 then
                     call SetUnitX(unitsz[5],0.0)
                 elseif unitsz[1] == null then
                     call SetUnitX(unitsz[5],128.0)
                 elseif unitsz[2] == null then
                     call SetUnitX(unitsz[5],256.0)
                 elseif unitsz[3] == null then
                     call SetUnitX(unitsz[5],384.0)
                 endif
                 call SetUnitY(unitsz[5],0.0)
                 set unitsz[5] = null
             else
                 call DisplayTextToPlayer(Player(0),0,0,"|cFF0000FF"+GetEventPlayerChatString()+"\n|cFF00FF00-----------------------------------------------------  --------------\n|cFFFF0000ERROR:|cFF00FF00 Invalid Input \n-------------------------------------------------------------------|r\n")
             endif
         elseif GetEventPlayerChatString() == "-remove all" then
             call RemoveUnit(unitsz[0])
             call RemoveUnit(unitsz[1])
             call RemoveUnit(unitsz[2])
             call RemoveUnit(unitsz[3])
             call RemoveUnit(unitsz[4])
         elseif GetEventPlayerChatString() == "-remove" then
             if IsUnitSelected(unitsz[0],Player(0)) then
                 call RemoveUnit(unitsz[0])
                 call SetUnitX(unitsz[1],0.0)
                 call SetUnitX(unitsz[2],128.0)
                 call SetUnitX(unitsz[3],256.0)
                 call SetUnitX(unitsz[4],384.0)
                 set unitsz[1] = unitsz[2]
                 set unitsz[2] = unitsz[3]
                 set unitsz[3] = unitsz[4]
             endif
             if IsUnitSelected(unitsz[1],Player(0)) then
                 call RemoveUnit(unitsz[1])
                 call SetUnitX(unitsz[2],128.0)
                 call SetUnitX(unitsz[3],256.0)
                 call SetUnitX(unitsz[4],384.0)
                 set unitsz[2] = unitsz[3]
                 set unitsz[3] = unitsz[4]
             endif
             if IsUnitSelected(unitsz[2],Player(0)) then
                 call RemoveUnit(unitsz[2])
                 call SetUnitX(unitsz[3],256.0)
                 call SetUnitX(unitsz[4],384.0)
                 set unitsz[3] = unitsz[4]
             endif
             if IsUnitSelected(unitsz[3],Player(0)) then
                 call RemoveUnit(unitsz[3])
                 call SetUnitX(unitsz[4],384.0)
             endif
             if IsUnitSelected(unitsz[4],Player(0)) then
                 call RemoveUnit(unitsz[4])
             endif
         elseif GetEventPlayerChatString() == "-remove random" then
             if GetUnitTypeId(unitsz[0]) != 0 then
                 if GetUnitTypeId(unitsz[1]) == 0 then
                     call RemoveUnit(unitsz[0])
                 elseif GetUnitTypeId(unitsz[2]) == 0 then
                     if GetRandomInt(0,1) == 0 then
                         call RemoveUnit(unitsz[0])
                         call SetUnitX(unitsz[1],0.)
                     else
                         call RemoveUnit(unitsz[1])
                     endif
                 elseif GetUnitTypeId(unitsz[3]) == 0 then
                     if GetRandomInt(0,2) == 0 then
                         call RemoveUnit(unitsz[0])
                         call SetUnitX(unitsz[1],0.)
                         call SetUnitX(unitsz[2],128.)
                     elseif GetRandomInt(0,1) == 0 then
                         call RemoveUnit(unitsz[1])
                         call SetUnitX(unitsz[2],128.)
                     else
                         call RemoveUnit(unitsz[2])
                     endif
                 elseif GetUnitTypeId(unitsz[4]) == 0 then
                     if GetRandomInt(0,3) == 0 then
                         call RemoveUnit(unitsz[0])
                         call SetUnitX(unitsz[1],0.)
                         call SetUnitX(unitsz[2],128.)
                         call SetUnitX(unitsz[3],256.)
                     elseif GetRandomInt(0,2) == 0 then
                         call RemoveUnit(unitsz[1])
                         call SetUnitX(unitsz[2],128.)
                         call SetUnitX(unitsz[3],256.)
                     elseif GetRandomInt(0,1) == 0 then
                         call RemoveUnit(unitsz[2])
                         call SetUnitX(unitsz[3],256.)
                     else
                         call RemoveUnit(unitsz[3])
                     endif
                 else
                     if GetRandomInt(0,4) == 0 then
                         call RemoveUnit(unitsz[0])
                         call SetUnitX(unitsz[1],0.)
                         call SetUnitX(unitsz[2],128.)
                         call SetUnitX(unitsz[3],256.)
                         call SetUnitX(unitsz[4],384.)
                     elseif GetRandomInt(0,3) == 0 then
                         call RemoveUnit(unitsz[1])
                         call SetUnitX(unitsz[2],128.)
                         call SetUnitX(unitsz[3],256.)
                         call SetUnitX(unitsz[4],384.)
                     elseif GetRandomInt(0,2) == 0 then
                         call RemoveUnit(unitsz[1])
                         call SetUnitX(unitsz[3],256.)
                         call SetUnitX(unitsz[4],384.)
                     elseif GetRandomInt(0,1) == 0 then
                         call RemoveUnit(unitsz[3])
                         call SetUnitX(unitsz[4],384.)
                     else
                         call RemoveUnit(unitsz[4])
                     endif
                 endif
             endif
         else
             call DisplayTextToPlayer(Player(0),0,0,"|cFF0000FF"+GetEventPlayerChatString()+"\n|cFF00FF00-----------------------------------------------------  --------------\n|cFFFF0000ERROR:|cFF00FF00 Invalid Input \n-------------------------------------------------------------------|r\n")
         endif
         set unitsz[0] = null
         set unitsz[1] = null
         set unitsz[2] = null
         set unitsz[3] = null
         set unitsz[4] = null  
     endif
endfunction
 

Ty3uKДата: Суббота, 06 Апрель 2013, 11:29:19 | Сообщение # 53
Группа: КоМодераторы
Сообщений: 6092
Награды: 2
Репутация: 1561
Блокировки:
Я думал, что cJASS и vJASS'овые хуки запрещены.
Я бы тогда сэкономил место в коде через препроцессорные циклы. :)


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

duos94Дата: Суббота, 06 Апрель 2013, 12:38:48 | Сообщение # 54
2 уровень
Группа: Пользователи
Сообщений: 34
Награды: 0
Репутация: 18
Блокировки:
Цитата (Duosora)
Нет, я не дам решение

И тут такой врыв Дуоса.
"Болваны! Вы просто вынуждаете меня открыть свое гениальное решение, иначе так будете постить непроходимый бред.
Написал же что писать функции нельзя. В JASS2 любые действия могут выполняться только в теле функции. Значит задача не имеет решений."
 

Капитан_ОчевидностьДата: Суббота, 06 Апрель 2013, 12:42:57 | Сообщение # 55
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Блокировки:
На этом топик клоз.

Добавлено (06 Апреля 2013, 12:42:57)
---------------------------------------------
А Дуосу +50 за единственное правильное решение.

 

DuosoraДата: Суббота, 06 Апрель 2013, 13:12:34 | Сообщение # 56
The cats never sleep...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки:
Цитата (Капитан_Очевидность)
А Дуосу +50 за единственное правильное решение.

Выслал Нестарусу, соглашусь, что решение Алисы говно. :)

Добавлено (06 Апреля 2013, 13:12:34)
---------------------------------------------
[13-10-25] Nestharus: another thing is no collections obviously
[13-10-29] Nestharus: group is a collection
[13-10-32] Nestharus: so if they are using group.. lol
[13-10-39] Nestharus: hashtable is also a collection
[13-10-45] Nestharus: just no collections allowed :o
[13-11-34] Nestharus: well, they can use collections
[13-11-41] Nestharus: just not the native JASS collections..
[13-11-44] Nestharus: so like they can make thei rown, like a stack
[13-11-54] Nestharus: but they can't use group, hashtable, force, etc

Лисоньку затралили)


[ Русские триггеры ]



Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл
Те, кто читает книги, всегда будут управлять теми, кто смотрит телевизор. © В. Пелевин
 

Капитан_ОчевидностьДата: Суббота, 06 Апрель 2013, 13:28:40 | Сообщение # 57
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Блокировки:
Выше писали, что задача от Дуоса отличается от задачи Nestharus, запретом GUI и глобальных переменных.

Добавлено (06 Апреля 2013, 13:28:40)
---------------------------------------------
Разные задачи - разные решения.

 

duos94Дата: Среда, 10 Апрель 2013, 18:01:00 | Сообщение # 58
2 уровень
Группа: Пользователи
Сообщений: 34
Награды: 0
Репутация: 18
Блокировки:
Цитата (Duosora)
затралили

Значит цель топана троллинг? Нужно перенести в общалку?
Где мои +50? Задача решена верно.
Цитата (duos94)
Написал же что писать функции нельзя. В JASS2 любые действия могут выполняться только в теле функции. Значит задача не имеет решений.
 

H_A_PKДата: Понедельник, 15 Апрель 2013, 12:10:43 | Сообщение # 59
Быдлокодер
Группа: Проверенные
Сообщений: 2551
Награды: 1
Репутация: 801
Блокировки:
тема говно

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

ВолчачкаДата: Вторник, 16 Апрель 2013, 01:10:49 | Сообщение # 60
Бог Волков
Группа: Проверенные
Сообщений: 1133
Награды: 0
Репутация: 1510
Блокировки:
Это просто пример create, но ещё над remove подумаю, и то есть это всё в один триггер и в одну функцию затолкать?
Код
function Trig_chat_Actions takes nothing returns nothing
local string s = GetEventPlayerChatString()
local string a = ""
local integer b = 1
local integer i = StringLength( s )
set b = S2I( SubString( s, i - 2, i) )
if b < 10  and b > 0 then
set a=SubString( s, 8, i - 2)
else
if b > 9 and b < 13 then
set a = SubString( s, 8, i - 3 )
else
set a = SubString( s, 8, i)
endif
endif
if b!=0 then     
call CreateUnit( Player( b - 1 ), UnitId( a ), 0., 0., GetRandomReal( 0., 360. ) )
else
call CreateUnit( Player( 0 ), UnitId( a ), 0., 0., GetRandomReal( 0., 360. ) )
endif
endfunction

//===========================================================================
function InitTrig_chat takes nothing returns nothing
        set gg_trg_chat = CreateTrigger(  )
        call TriggerRegisterPlayerChatEvent( gg_trg_chat, Player(0), "-create", false )
        call TriggerAddAction( gg_trg_chat, function Trig_chat_Actions )
endfunction

Ага, теперь я понял всю хитрость, как сделать с -remove и -create вместе. и всё в один триггер.
Норм прикол.




Сообщение отредактировал Волчачка - Вторник, 16 Апрель 2013, 01:54:53
 

NetДата: Четверг, 13 Июнь 2013, 21:51:40 | Сообщение # 61
2 уровень
Группа: Пользователи
Сообщений: 28
Награды: 0
Репутация: 10
Блокировки:
А в профиле Дуоса на The Hive Workshop есть ответ Nestharus на решение самого Дуоса:
01-14-2013 06:18 PM Nestharus
Re: Project 3
Код
Failed ; )

you removed incorrectly

your creation was also very poor : O

the lessons show of a better way to check if something is a digit

it also limits how many vars you create I believe if you read the instructions

look at the pics and you'll see what I meant about removing incorrectly

Jass:
*   You may only declare 4 of your own variables.
*       Variables provided do not count towards your 4.

Jass:
*   You may declare one additional variable for storing *substrings* of type string
*
*   You may declare one additional variable for getting player input of type string
*       This variable may also be used to store *substrings*

so that's 4 of your own and 2 strings

you declared 7 there (2 strings and 5 of your own)

BJs are also not allowed
GroupPickRandomUnit(udg_UnitGroup)

that's a general rule (introduced in an earlier lesson)  
 

ВолчачкаДата: Пятница, Вчера, 01:23:50 | Сообщение # 62
Бог Волков
Группа: Проверенные
Сообщений: 1133
Награды: 0
Репутация: 1510
Блокировки:
Net, я понял, как это решается, но это просто лишняя трата времени на многочисленные if endif и substring + манипуляция с массивом. Вкратце эта задачка некий тонко-эластичный троллинг Дуоса и не более. Ломать голову из-за какой-то ерунды. А если юнитов будет 40 или 100? конечно без цикла не обойтись никак. А так при 5 юнитов - "Ерунда © Волчий всадник".



Сообщение отредактировал Волчачка - Пятница, 14 Июнь 2013, 01:24:09
 

Ty3uKДата: Пятница, Вчера, 11:08:43 | Сообщение # 63
Группа: КоМодераторы
Сообщений: 6092
Награды: 2
Репутация: 1561
Блокировки:
#for
...
#endfor
trollface


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NetДата: Пятница, Вчера, 14:13:34 | Сообщение # 64
2 уровень
Группа: Пользователи
Сообщений: 28
Награды: 0
Репутация: 10
Блокировки:
А три точки, это на каком языке можно? Я так тоже хотю.
 

Ty3uKДата: Пятница, Вчера, 15:00:30 | Сообщение # 65
Группа: КоМодераторы
Сообщений: 6092
Награды: 2
Репутация: 1561
Блокировки:
Net, Brainfuck? :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

lawsonДата: Пятница, Вчера, 18:13:53 | Сообщение # 66
Группа: Проверенные
Сообщений: 3469
Награды: 0
Репутация: 932
Блокировки:
как можно на яве произвести загрузку всех файлов в определенной папке?

Добавлено (14 Июня 2013, 18:13:53)
---------------------------------------------
ну тоесть по типу?


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

SirNikolasДата: Пятница, Вчера, 19:33:19 | Сообщение # 67
Группа: Модераторы
Сообщений: 5935
Награды: 1
Репутация: 1287
Блокировки:
Цитата (Net)
А три точки, это на каком языке можно? Я так тоже хотю.
C.
В C++ есть еще второй способ применения.
А в стандарте 11 года добавили и третий.
Цитата (Ty3uK)
Net, Brainfuck? :)
lol




Сообщение отредактировал SirNikolas - Пятница, 14 Июнь 2013, 19:34:01
 

Ty3uKДата: Пятница, Вчера, 20:06:24 | Сообщение # 68
Группа: КоМодераторы
Сообщений: 6092
Награды: 2
Репутация: 1561
Блокировки:
SirNikolas, дык ведь так и есть. :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Суббота, Сегодня, 01:18:18 | Сообщение # 69
Бог Волков
Группа: Проверенные
Сообщений: 1133
Награды: 0
Репутация: 1510
Блокировки:
Тема превратилась во флудильню и оффтопню, предлагаю её закрыть. Полный ответ так и никто и не дал.

 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Интересная задачка!
Страница 3 из 3«123
Поиск:

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