XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Ищу решение
Дано:
Х = -100
У = 100
n = 1

Описание: циклом создаются юниты от точки Х+n и У. Когда n = 10, то к У нужно прибавить n 1 раз, а Х вернуть начальное значение. Тоесть получается своеобразный квадрат размером 10 на 10 юнитов.

Подскажите, как такое зделать циклом. Не могу додумать как корректно прибавить к Y 1 раз в цикле, когда по Х созданы 10 онитов

Дополнение: из этого "квадтрата" получается 100 юнитов, но для выхода из цикла можно установить любое число вместо 100, к примеру 54... (получится пол квадрата ну и чуток больше)

З.Ы. что то голова уже не магёт, а не хотелось бы оставлять на завтра. Спасибо заранее

объяснил как смог

Отредактировано Sidhe, 31.03.2012 в 01:56.
Старый 30.03.2012, 22:34
DaeDR

offline
Опыт: 7,979
Активность:
Все просто:
» Код
local integer xNaсh // начальное значение X
local integer x
local integer y
local integer i = 1
local integer j
loop
 exitwhen i > 10
	
	set j = 1
	set y = y + 1
	set x = xNach
	loop
	 exitwhen j > 10
		set x = x + 1
		call CreateUnit(<Player>, <unit>, x, y)
	 set j = j + 1
	endloop

 set i = i + 1
endloop
Вроде так.
DaeDR добавил:
Можно слегка переделать и записать вот так:
» Код
local integer x
local integer y
local integer i = 1
local integer j
loop
 exitwhen i > 10
	
	set j = 1
	set y = y + 1
	loop
	 exitwhen j > 10
		call CreateUnit(<Player>, <unit>, x+j, y+i)
	 set j = j + 1
	endloop

 set i = i + 1
endloop

Отредактировано DaeDR, 31.03.2012 в 09:35.
Старый 30.03.2012, 23:38
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
DaeDR, и поток оборвется, если не инициализировать переменные x и y, к тому же они являются координатами => тип реальные. Автор же дал конкретные значения, да и вообще какая-то чушь у тебя в алгоритме.
» code
local real x=-100.
local real y=100.
local integer i=0
local integer j=0
loop
    exitwhen i>10
    loop
        exitwhen j>10
        call CreateUnit(<Player>,<unit_rawcode>,x+j,y+i,<unit_facing>)
        set j=j+1
    endloop
    set j=0
    set i=i+1
endloop
Старый 31.03.2012, 02:11
DaeDR

offline
Опыт: 7,979
Активность:
Hellfim, суть то та же осталось, плюс он упомянул
Тоесть получается своеобразный квадрат размером 10 на 10 юнитов.
Поэтому я и начал с i,j = 1.
Старый 31.03.2012, 09:25
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
зделал сам, вот код, мб кому пригодится) можно редактировать длинну строки, количество создаваемых объектов. Я использую для создание трекаблов, так же удобно создавать для каждого трекабла нумерацию и привязку действий.
Код:
globals
 
    private constant real DefaultStartX = -255        
    private constant real DefaultStartY = 255                   

    private constant integer ObjMax = 50            // максимальное число объектов
    private constant integer RowMax = 10           // длина строки
    
    private constant real next = 9.                     // дистанция между объектами
    
endglobals


function CreateTable takes nothing returns nothing
// начальная точка для создания объектов (первая строчка, первого столбца)
    local real CreateStartX = DefaultStartX
    local real CreateStartY = DefaultStartY

    local integer max = 0
    local integer row = 0
    
    loop
        set max = max + 1
        
        if row == RowMax
            set row = 0
            set CreateStartX = DefaultStartX        // возвращение начального значения, для перехода к началу строки
            set CreateStartY = CreateStartY-next    // установка на следущую строку
        endif
        
        call CreateUnit(<Player>, <unit_rawcode>, CreateStartX, CreateStartY, <unit_facing>)
        
        set row = row + 1
        set CreateStartX = CreateStartX + next
        exitwhen max == ObjMax
    endloop

endfunction

Отредактировано Sidhe, 31.03.2012 в 22:02.
Старый 31.03.2012, 10:30
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:26.