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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Случайный юнит в группе
SmartarosДата: Понедельник, 03 Сентября 2012, 04:26:02 | Сообщение # 1
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
Перевел из гуи в джасс....вообщем муть с константами. Есть ли у кого нибудь оптимизированый пример, а то че то сегодня вообще не соображаю хд
 

HexingДата: Понедельник, 03 Сентября 2012, 10:05:01 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Smartaros, сирушка где-то писал оптимальный вариант, но давно, вот можно так:
переменные: целочисленная UNITS_COUNT, массив юнитов UNITS
Code
function RandomEnum takes nothing returns nothing
  set UNITS[UNITS_COUNT] = GetEnumUnit()
  set UNITS_COUNT = UNITS_COUNT+1
endfunction

function RandomUnit takes group g returns unit u
  set UNITS_COUNT = 0
  call ForGroup(g, function RandomEnum)
  if(UNITS_COUNT == 0) then
   return null
  endif
  return UNITS[GetRandomInt(0, UNITS_COUNT)]
endfunction


 

SirNikolasДата: Понедельник, 03 Сентября 2012, 11:20:47 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Я сэр, а не сир!
Code
globals
       constant group udg_G = CreateGroup()
       unit RandomUnit_u
       integer RandomUnit_i
endglobals

function RandomUnit_filter takes nothing returns boolean
       local unit u = GetFilterUnit()
       if true then //Условие отбора
           set RandomUnit_i = RandomUnit_i + 1
           if GetRandomInt(1, RandomUnit_i) == 1 then
               set RandomUnit_u = u
           endif
           set u = null
           return true
       endif
       set u = null
       return false
endfunction

function Example takes nothing returns nothing
       set RandomUnit_i = 0
       set RandomUnit_u = null
       call GroupEnumUnitsInRect(udg_G, bj_mapInitialPlayableArea, Filter(function RandomUnit_filter))
       //Действия с RandomUnit_u
endfunction
Если сама группа не нужна, фильтр следует заменить GroupLoop'ом.


 

  • Страница 1 из 1
  • 1
Поиск:

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