Serpent wrote:Hi, napisałem funkcję dla Nefarema która zwraca losowe koordynaty (hexy) z danego obszaru. Myślę że może się komuś przydać.
Przykład zastosowania:Code: Select all
// Losuj "num" razy punkty z obszaru pomiedzy koordynatami Export Function RandPointsFromArea(x1, y1, x2, y2, num); var list, i; begin list := []; for i = 1 to num do begin list := list ^ Rand(x1, x2); list := list ^ Rand(y1, y2); end; result := list; End; Oznaczenia: x1,y1 - koordy hexa położonego w lewym górnym rogu obszaru x2,y2 - koordy hexa położonego w prawym dolnym rogu obszaru x1,y1________________________| | | OBSZAR |__________________________x2,y2 num - ilość wylosowanych punktów Funkcja zwraca listę z koordynatami.
Code: Select all
Every 0$01 do var i, list, un, p; begin list := RandPointsFromArea(31, 49, 46, 53, 4); display_strings := list; p := 1; for i = 1 to 4 do begin PrepareHuman(false, 1, 1); un := CreateHuman; PlaceUnitArea(un, area02, false); ComMoveXY(un, list[p], list[p+1]); AddComHold(un); p := p + 2; end; End;
Author: SerpentSerpent wrote:Wklejam nieco ulepszoną funkcję. Teraz wybierane są hexy które są puste, dodatkowo hexy na liście nie powtarzają się![]()
Code: Select all
Export Function RandPointsFromArea(x1, y1, x2, y2, num); var list, i, x, y; begin list := []; for i = 1 to num do begin x := MultiRand(x1, x2, 1); y := MultiRand(y1, y2, 1); if HexInfo(x, y) = 0 and not [x,y] in list then begin list := list ^ x; list := list ^ y; end else num := num + 1; end; result := list; End;
Topic: https://forum.original-war.net/viewtopi ... =42&t=4445