|
2D-программирование Вопросы, касающиеся двумерного программирования |
16.04.2007, 22:19
|
#16
|
|
Re: ПП по Вейпоинтам
а что мешает спланировать процесс разработки игры так чтобы генерировать карту приходилось только один раз ?
все же рендер в 3д максе больших сцен делают зачастую только один раз, и никто не ворчит что он проходит от 12 часов до 3 суток
а для дебаг версии мона зделать простой алгоритмик
|
|
|
17.04.2007, 01:23
|
#17
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: ПП по Вейпоинтам
а для дебаг версии мона зделать простой алгоритмик
|
или малюсенькую карту, скажем на 127 вейпойнтов.
|
(Offline)
|
|
17.04.2007, 12:40
|
#18
|
Танчики Developer
Регистрация: 29.01.2007
Сообщений: 539
Написано 16 полезных сообщений (для 23 пользователей)
|
Re: ПП по Вейпоинтам
вот моя недоделанная прога с той системой что я задумал.
сначала создаем препятствия - левая кнопка мыши - начало
второй щелчок - конец
потом жмем пробел - один раз за всю работу проги
потом ставим правой кнопкой мыши начало и конец пути
внимание там глюк какой-то, после нажатия пробела, нужно сначала 2 раза просто щелкнуть правой кнопкой мыши.(а то первым делом он поставит конец пути а начала не будет)
потом жмем Интер
ищет правда не всегда, потому что недоделанный алгоритм.)
Dim passmap(2000,2000)
Dim mainpassmap(2000,2000)
Dim passmap2(2000,3)
Dim mainpassmap2(2000,3)
Dim way(1500,3)
Global a1,a2,b1,b2,a,QW,QP,time#,ok$,QO,x,y,QMP
Dim WayH(2000,2000)
Dim WayC(2000,2000)
Dim WayMH(2000,2000)
Dim WayMC(2000,2000)
Dim TempQP(100)
;Dim WayT(1500,1500)
Dim obs(100,5)
Graphics3D 1024,768,16,1
SetBuffer BackBuffer()
Global font = LoadFont("palatino linotype",18)
Global font22 = LoadFont("palatino linotype",22)
SeedRnd (MilliSecs())
Repeat
Cls
Color 0,0,255
If MouseHit(1)
x1=MouseX()
y1=MouseY()
If x1>=100 And x1<=699 And y1>=100 And y1<=699
If x=0
x=Int((MouseX()-100)/15)+1
y=Int((MouseY()-100)/15)+1
Else
nx=Int((MouseX()-100)/15)+1
ny=Int((MouseY()-100)/15)+1
If nx<x
a=x:x=nx:nx=a
End If
If ny<y
a=y:y=ny:ny=a
End If
QO=QO+1
obs(QO,1)=x:obs(QO,2)=nx:obs(QO,3)=y:obs(QO,4)=ny
x=0:y=0:nx=0:ny=0
End If
End If
End If
If MouseHit(2)
x1=MouseX()
y1=MouseY()
If x1>=100 And x1<=699 And y1>=100 And y1<=699
x1=Int((MouseX()-100)/15)+1
y1=Int((MouseY()-100)/15)+1
If passmap(x1,y1)<>0
If a=0
a=1:a1=x1:b1=y1
Else
If a=2
a1=0:a2=0:b1=0:b2=0:a=0
Else
a=2:a2=x1:b2=y1
End If
End If
End If
End If
End If
For i=1 To 41
For j=1 To 41
If passmap(i,j)<>0
For n=i*15-0 To i*15+1
For m=j*15-0 To j*15+0
Line n+85,m+85,n+85,m+85
Next
Next
End If
Next
Next
Color 0,255,0
;For j=1 To QP
; If WayC(1,j)=10 Or WayC(1,j)=14 Line passmap2(1,1)*15+85,passmap2(1,2)*15+85,passmap2(j,1)*15+85,passmap2(j,2)*15+85
;Next
;For i=1 To QP
; For j=1 To QP
; If WayC(i,j)=10 Or WayC(i,j)=14 Line passmap2(i,1)*15+85,passmap2(i,2)*15+85,passmap2(j,1)*15+85,passmap2(j,2)*15+85
; Next
;Next
Color 0,255,0
For i=1 To QMP
For j=1 To QMP
If WayMC(i,j)=10 Or WayMC(i,j)=14 Line mainpassmap2(i,1)*15+85,mainpassmap2(i,2)*15+85,mainpassmap2(j,1)*15+85,mainpassmap2(j,2)*15+85
Next
Next
Color 200,0,0
If x<>0
Line (x+1)*15+100,(y+1)*15+100,MouseX(),(y+1)*15+100
Line (x+1)*15+100,(y+1)*15+100,(X+1)*15+100,MouseY()
Line MouseX(),(y+1)*15+100,MouseX(),MouseY()
Line (x+1)*15+100,MouseY(),MouseX(),MouseY()
End If
If QW<>0
Color 128,0,0
For i=0 To QW-1
Line way(i,1)*15+85,way(i,2)*15+85,way(i+1,1)*15+85,way(i+1,2)*15+85
Next
End If
If a1<>0
Color 128,128,0
For i=a1*15-2 To a1*15+2
For j=b1*15-2 To b1*15+2
Line i+85,j+85,i+85,j+85
Next
Next
End If
If a2<>0
Color 0,128,0
For i=a2*15-2 To a2*15+2
For j=b2*15-2 To b2*15+2
Line i+85,j+85,i+85,j+85
Next
Next
End If
If KeyHit(57)
CreateWay(4,10)
End If
If KeyHit(28)
SearchWay(a1,b1,a2,b2,4,10)
End If
Color 0,0,128
For i=1 To QO
Rect (Obs(i,1)-1)*15+100,(Obs(i,3)-1)*15+100,(Obs(i,2)-Obs(i,1))*15,(Obs(i,4)-Obs(i,3))*15,1
Next
Color 255,0,0
SetFont Font
Color 255,255,255
Text MouseX()-StringWidth("*")/2,MouseY()-StringHeight("1")/2,"*"
SetFont Font22
Text 260,747,"Leito Software Company presents the mini-program search of way "
Text 0,0,"Time: "+time#
Text 10,30,ok$
Flip
Until KeyHit(10) Or KeyHit(1)
End
Function SearchWay(x1,y1,x2,y2,n,m)
If (x1-1)/10=(x2-1)/10 And (y1-1)/10=(y2-1)/10
p1=passmap(x1,y1)
p2=passmap(x2,y2)
QW=0
way(QW,1)=x1
way(QW,2)=y1
While p1<>p2
QW=QW+1
p1=wayH(p1,p2)
way(QW,1)=passmap2(p1,1)
way(QW,2)=passmap2(p1,2)
If QW>1000 p1=p2
Wend
Else
p1=mainpassmap(x1/4,y1/4)
p2=mainpassmap(x2/4,y2/4)
QW=0
way(QW,1)=x1
way(QW,2)=y1
e=0
While e=0
QW=QW+1
p1=wayMH(p1,p2)
way(QW,1)=mainpassmap2(p1,1)
way(QW,2)=mainpassmap2(p1,2)
If QW>1000 p1=p2
If (way(QW,1)-1)/10=(x2-1)/10 And (way(QW,2)-1)/10=(y2-1)/10 e=1
Wend
p1=passmap(way(QW,1),way(QW,2))
p2=passmap(x2,y2)
While p1<>p2
QW=QW+1
p1=wayH(p1,p2)
way(QW,1)=passmap2(p1,1)
way(QW,2)=passmap2(p1,2)
If QW>1000 p1=p2
Wend
End If
End Function
Function CreateWay(n,m)
time#=MilliSecs()
maxlen=n*m
maxqp=n*m*m*n+1
For i=1 To maxlen
For j=1 To maxlen
passmap(i,j)=maxqp
Next
Next
For k=1 To QO
For i=obs(k,1) To obs(k,2)
For j=obs(k,3) To obs(k,4)
passmap(i,j)=0
Next
Next
Next
For i=1 To m
For j=1 To m
If passmap(i*n,j*n)<>0
k1=i*n:k2=j*n
QMP=QMP+1
mainpassmap(i,j)=QMP
mainpassmap2(QMP,1)=i*n
mainpassmap2(QMP,2)=j*n
p1=1:p2=1:p3=1:p4=1:p5=1:p6=1:p7=1:p8=1
For k=1 To n
If passmap(i*n-k,j*n-k)=0 p1=0
If passmap(i*n-k,j*n)=0 p2=0
If passmap(i*n-k,j*n+k)=0 p3=0
If passmap(i*n,j*n-k)=0 p4=0
If passmap(i*n,j*n+k)=0 p5=0
If passmap(i*n+k,j*n-k)=0 p6=0
If passmap(i*n+k,j*n)=0 p7=0
If passmap(i*n+k,j*n+k)=0 p8=0
Next
If p1=1
WayMC(QMP,mainpassmap(i-1,j-1))=14
WayMC(mainpassmap(i-1,j-1),QMP)=14
; WayMC(QMP,mainpassmap(j-1,i-1))=14
End If
If p2=1
WayMC(QMP,mainpassmap(i-1,j))=10
WayMC(mainpassmap(i-1,j),QMP)=10
; WayMC(QMP,mainpassmap(j,i-1))=10
End If
If p3=1
WayMC(QMP,mainpassmap(i-1,j+1))=14
WayMC(mainpassmap(i-1,j+1),QMP)=14
; WayMC(QMP,mainpassmap(j+1,i-1))=14
End If
If p4=1
WayMC(QMP,mainpassmap(i,j-1))=10
WayMC(mainpassmap(i,j-1),QMP)=10
; WayMC(QMP,mainpassmap(j-1,i))=10
End If
If p5=1
WayMC(QMP,mainpassmap(i,j+1))=10
WayMC(mainpassmap(i,j+1),QMP)=10
; WayMC(QMP,mainpassmap(j+1,i))=10
End If
If p6=1
WayMC(QMP,mainpassmap(i+1,j-1))=14
WayMC(mainpassmap(i+1,j-1),QMP)=14
; WayMC(QMP,mainpassmap(j-1,i+1))=14
End If
If p7=1
WayMC(QMP,mainpassmap(i+1,j))=10
WayMC(mainpassmap(i+1,j),QMP)=10
; WayMC(QMP,mainpassmap(j,i+1))=10
End If
If p8=1
WayMC(QMP,mainpassmap(i+1,j+1))=14
WayMC(mainpassmap(i+1,j+1),QMP)=14
; WayMC(QMP,mainpassmap(j+1,i+1))=14
End If
End If
Next
Next
QP=0
For k=1 To n*n
l=0
; ll=0
For i=1 To m
For j=1 To m
p1=i+Floor((k-1)/n)*m
p2=j+((k-1) Mod n)*m
; Cls
; Text 0,0,"p1 = "+p1+" p2 = "+p2+ " k = "+k
; Flip
; If p1=1 Or p2=1
; While Not (KeyHit(57) Or KeyDown(28))
; ll=1
; Wend
; End If
If passmap(p1,p2)<>0
QP=QP+1
passmap(p1,p2)=QP
passmap2(QP,1)=p1
passmap2(QP,2)=p2
If l=0
TempQP(k)=QP
l=1
End If
If i<>1
If passmap(p1-1,p2)<>0
WayC(QP,passmap(p1-1,p2))=10
WayC(passmap(p1-1,p2),QP)=10
End If
End If
If i<>m
If passmap(p1+1,p2)<>0
WayC(QP,passmap(p1+1,p2))=10
WayC(passmap(p1+1,p2),QP)=10
End If
End If
If j<>1
If passmap(p1,p2-1)<>0
WayC(QP,passmap(p1,p2-1))=10
WayC(passmap(p1,p2-1),QP)=10
End If
End If
If j<>m
If passmap(p1,p2+1)<>0
WayC(QP,passmap(p1,p2+1))=10
WayC(passmap(p1,p2+1),QP)=10
End If
End If
If i<>1 And j<>1
If passmap(p1-1,p2-1)<>0
WayC(QP,passmap(p1-1,p2-1))=14
WayC(passmap(p1-1,p2-1),QP)=14
End If
End If
If i<>1 And j<>m
If passmap(p1-1,p2+1)<>0
WayC(QP,passmap(p1-1,p2+1))=14
WayC(passmap(p1-1,p2+1),QP)=14
End If
End If
If i<>m And j<>1
If passmap(p1+1,p2-1)<>0
WayC(QP,passmap(p1+1,p2-1))=14
WayC(passmap(p1+1,p2-1),QP)=14
End If
End If
If i<>m And j<>m
If passmap(p1+1,p2+1)<>0
WayC(QP,passmap(p1+1,p2+1))=14
WayC(passmap(p1+1,p2+ 1),QP)=14
End If
End If
End If
Next
Next
Next
TempQP(n*n+1)=QP+1
For i=1 To QP
For j=1 To QP
If WayC(i,j)=0
WayH(i,j)=0
WayC(i,j)=100000
Else
WayH(i,j)=j
End If
Next
Next
For p=1 To n*n
; p1=Floor((p-1)/n)*m+1
; p2=((p-1) Mod 3)*m+1
; p1=passmap(p1,p2)
; p3=Floor((p-1)/n)*m+m
;; p4=((p-1) Mod 3)*m+m
; p2=passmap(p3,p4)
p1=TempQP(p):p2=TempQP(p+1)-1
; Cls
; Text 0,0,"?? "+p1+" ?? "+p2+ " p = "+p
; Flip
; While Not KeyHit(57)
; ll=1
; Wend
If p1>0 And p2>0
For i=p1 To p2
For j=p1 To p2
For k=p1 To p2
If i<>j And WayC(j,i)<>100000 And i<>k And WayC(i,k)<>100000 And (WayC(j,k)=100000 Or WayC(j,k)>WayC(j,i)+WayC(i,k))
WayH(j,k)=WayH(j,i)
WayC(j,k)=WayC(j,i)+WayC(i,k)
End If
Next
Next
Next
End If
Next
For i=1 To QMP
For j=1 To QMP
If WayMC(i,j)=0
WayMH(i,j)=0
WayMC(i,j)=100000
Else
WayMH(i,j)=j
End If
Next
Next
For i=1 To QMP
For j=1 To QMP
For k=1 To QMP
If i<>j And WayMC(j,i)<>100000 And i<>k And WayMC(i,k)<>100000 And (WayMC(j,k)=100000 Or WayMC(j,k)>WayMC(j,i)+WayMC(i,k))
WayMH(j,k)=WayMH(j,i)
WayMC(j,k)=WayMC(j,i)+WayMC(i,k)
End If
Next
Next
Next
time#=MilliSecs()-time#
ok$="Construction of ways is completed"
End Function
|
(Offline)
|
|
17.04.2007, 18:51
|
#19
|
|
Re: ПП по Вейпоинтам
оно вообще неищет ... алгоритм не то что не доделан ... он не рабочий
|
|
|
18.04.2007, 11:31
|
#20
|
Танчики Developer
Регистрация: 29.01.2007
Сообщений: 539
Написано 16 полезных сообщений (для 23 пользователей)
|
Re: ПП по Вейпоинтам
ищет, ищет, ты пробел сначала нажми, для создания сетки.
|
(Offline)
|
|
18.04.2007, 18:52
|
#21
|
|
Re: ПП по Вейпоинтам
Leito
нажал я пробел, если ты щитаеш что я тормоз то ето твои проблеммы
раставил два кубика, нажал пробел, поставил две точки ... нажал ентер
почему путь нифига не нашолся ? линии криво пошли ...
|
|
|
20.04.2007, 11:22
|
#22
|
Танчики Developer
Регистрация: 29.01.2007
Сообщений: 539
Написано 16 полезных сообщений (для 23 пользователей)
|
Re: ПП по Вейпоинтам
я ж говорю не всегда ищет(но ищет в большинстве случаев). там нужно кое что добавить. и я ззнаю.. что , только руки не доходят все время...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:12.
|