Написал свою первую ходилку (было нелегко, но я справился), ходилка прет напролом кратчайшим путем к указанной точке, правда препятствия не обходит (обход оных в процессе написания).
Координаты я ваще забил внутри скрипта (пока отлаживал), но можно повесить как аргументы функции.
Длинно получилось - ибо нету у нас тут ни case ни хотябы elseif - вот и получось 8ем километровых условий
Code:
sub hodilka()
var x,y,cx,cy,tmp,i=0, temp
x = 1642 ;//Координата x-назначения.
y = 2669 ;//Координата y-назначения.
x = -(uo.getx() - x)
y = -(uo.gety() - y)
cx = x
cy = y
if cx <= 0 then
cx = -cx
endif
if cy <= 0 then
cy = -cy
endif
tmp = str(cx+cy)
if val(tmp) then
DIM step[val(tmp)]
repeat
i=i+1
if x>0 && y>0 && x==y then
x=x-1
y=y-1
cx=x
cy=y
step[i]=2
endif
if x>0 && cx>cy then
x=x-1
cx=x
step[i]=3
endif
if x>0 && y<0 && cx==cy then
x=x-1
y=y+1
cx=x
cy=-y
step[i]=6
endif
if y<0 && cy>cx then
y=y+1
cy=-y
step[i]=9
endif
if x<0 && y<0 && x==y then
x=x+1
y=y+1
cx=-x
cy=-y
step[i]=8
endif
if x<0 && cx>cy then
x=x+1
cx=-x
step[i]=7
endif
if x<0 && y>0 && cx==cy then
x=x+1
y=y-1
cx=-x
cy=y
step[i]=4
endif
if y>0 && cy>cx then
y=y-1
cy=y
step[i]=1
endif
if x==-0 then
x=0
endif
if y==-0 then
y=0
endif
until cx==0 && cy==0
temp=i
tmp=''
for i=1 to temp
tmp=tmp+str(step[i])
next
uo.addstep(tmp)
endif
uo.resend()
endsub