Code: Select all
SCREEN 800,600
// Alustetaan kartta:¨
Global Tilesize,WayPoints,UnDoMove,WayPoints2,WayPoints3
Tilesize = 20
MapX = 39
MapY = 29
Dim map(MapX,MapY)
For i = 0 To MapX
map(i,0) = 1
Next i
For i = 0 To MapX
map(i,MapY) = 1
Next i
For i = 0 To MapY
map(0,i) = 1
Next i
For i = 0 To MapY
map(MapX,i) = 1
Next i
// Alustetaan funktiot:
Dim Moved(4)
Dim Waypoint(2000,2,1)
Waypoint(0,0,0) = -1
Halft = (Tilesize/4)
Repeat
For x = 0 To MapX
For y = 0 To MapY
If map(x,y) Then
Color 0,155,155
Else
Color 255,255,255
EndIf
Box x*Tilesize,y*Tilesize,Tilesize,Tilesize
Color 0,0,0
Box x*Tilesize,y*Tilesize,Tilesize+1,Tilesize+1,0
Next y
Next x
If MouseDown(1) Then
map(MouseX()/Tilesize,MouseY()/Tilesize) = 1
ElseIf MouseDown(2)
map(MouseX()/Tilesize,MouseY()/Tilesize) = 0
EndIf
whX = 1
whY = 1
toX = MapX-1
toY = MapY-1
If KeyDown(28) Then
OperTime = Timer()
FindWay(whX,whY,toX,toY)
OperTime = Timer() - OperTime
EndIf
Color 255,0,0
For i = 0 To 600
If Waypoint(i,0,0) = -1 Then Exit
Box Waypoint(i,0,0)*Tilesize+Halft,Waypoint(i,0,1)*Tilesize+Halft,Tilesize-Halft*2,Tilesize-Halft*2
If i > 0 Then
Line Waypoint(i,0,0)*Tilesize+Halft*2,Waypoint(i,0,1)*Tilesize+Halft*2,Waypoint(i-1,0,0)*Tilesize+Halft*2,Waypoint(i-1,0,1)*Tilesize+Halft*2
EndIf
Next i
DrawScreen
Forever
Function FindWay(FX,FY,EX,EY)
For i = 0 To 200
Waypoint(i,0,0) = -1
Waypoint(i,0,1) = -1
Waypoint(i,1,0) = -1
Waypoint(i,1,1) = -1
Waypoint(i,2,0) = -1
Waypoint(i,2,1) = -1
Next i
Color 255,0,0
Box 1+fx*Tilesize,1+fy*Tilesize,Tilesize-1,Tilesize-1
Box 1+ex*Tilesize,1+ey*Tilesize,Tilesize-1,Tilesize-1
SX = FX
SY = FY
Halft = (Tilesize/4)
WayPoints = 0
SaveWayPoint(FX,FY)
While (SX = EX And SY = EY) = False
avavs = 1
If SX < EX And Moved(0) = 0 And Moved(1) = 0 Then
If Moved(1) = 0
SX + 1
Moved(0) = 1
Moved(1) = 2
Else
avavs = 0
EndIf
avavs = 0
EndIf
If SX > EX And Moved(0) = 0 And Moved(2) = 0 Then
If Moved(2) = 0
SX - 1
Moved(0) = 1
Moved(2) = 2
Else
avavs = 0
EndIf
EndIf
If SY < EY And Moved(0) = 0 And Moved(3) = 0 Then
If Moved(3) = 0
SY + 1
Moved(0) = 1
Moved(3) = 2
Else
avavs = 0
EndIf
EndIf
If SY > EY And Moved(0) = 0 And Moved(4) = 0 Then
If Moved(4) = 0
SY - 1
Moved(0) = 1
Moved(4) = 2
Else
avavs = 0
EndIf
EndIf
If map(SX,SY) = 1 Then
For i = 1 To 4
If Moved(i) = 2 Then UnDoMove = i
Next i
If Gogigator = 0 Then
Select UnDoMove
Case 1
SX - 1
Case 2
SX + 1
Case 3
SY - 1
Case 4
SY + 1
End Select
SX2 = SX
SY2 = SY
SX3 = SX
SY3 = SY
SaveWayPoint(SX,SY)
Gogigator = 1
Turna2 = 1
Turna3 = -1
Select UnDoMove
Case 1
SX + 1
Pra2 = 1
Pra3 = 3
Case 2
SX - 1
Pra2 = 3
Pra3 = 1
Case 3
SY + 1
Pra2 = 2
Pra3 = 4
Case 4
SY - 1
Pra2 = 4
Pra3 = 2
End Select
EndIf
Else
avavs = 0
If Gogigator = 1 Then
For i = 0 To 200
Waypoint(i,1,0) = -1
Waypoint(i,1,1) = -1
Waypoint(i,2,0) = -1
Waypoint(i,2,1) = -1
Next i
WayPoints2 = 0
WayPoints3 = 0
While ((SX2 = SX And SY2 = SY) Or (SX3 = SX And SY3 = SY)) = False
Pra2 = Pra2 + minuser
If Pra2 > 4 Then Pra2 - 4
If Pra2 < 1 Then Pra2 + 4
Color 255,0,0
minuser = 0
Select Pra2
Case 1
If map(SX2,SY2-1) = 0 Then SY2 - 1
If map(SX2+Turna2,SY2) = 0 Then
minuser = minuser + Turna2
SaveWayPoint(SX2,SY2,1)
ElseIf map(SX2,SY2-1) = 1 Then
minuser = minuser - Turna2
SaveWayPoint(SX2,SY2,1)
EndIf
Case 2
If map(SX2+1,SY2) = 0 Then SX2 + 1
If map(SX2,SY2+Turna2) = 0 Then
minuser = minuser + Turna2
SaveWayPoint(SX2,SY2,1)
ElseIf map(SX2+1,SY2) = 1 Then
minuser = minuser - Turna2
SaveWayPoint(SX2,SY2,1)
EndIf
Case 3
If map(SX2,SY2+1) = 0 Then SY2 + 1
If map(SX2-Turna2,SY2) = 0 Then
minuser = minuser + Turna2
SaveWayPoint(SX2,SY2,1)
ElseIf map(SX2,SY2+1) = 1 Then
minuser = minuser - Turna2
SaveWayPoint(SX2,SY2,1)
EndIf
Case 4
If map(SX2-1,SY2) = 0 Then SX2 - 1
If map(SX2,SY2-Turna2) = 0 Then
minuser = minuser + Turna2
SaveWayPoint(SX2,SY2,1)
ElseIf map(SX2-1,SY2) = 1 Then
minuser = minuser - Turna2
SaveWayPoint(SX2,SY2,1)
EndIf
End Select
Pra3 = Pra3 + minuser2
If Pra3 > 4 Then Pra3 - 4
If Pra3 < 1 Then Pra3 + 4
Color 255,0,0
minuser2 = 0
Select Pra3
Case 1
If map(SX3,SY3-1) = 0 Then SY3 - 1
If map(SX3+Turna3,SY3) = 0 Then
minuser2 = minuser2 + Turna3
SaveWayPoint(SX3,SY3,2)
ElseIf map(SX3,SY3-1) = 1 Then
minuser2 = minuser2 - Turna3
SaveWayPoint(SX3,SY3,2)
EndIf
Case 2
If map(SX3+1,SY3) = 0 Then SX3 + 1
If map(SX3,SY3+Turna3) = 0 Then
minuser2 = minuser2 + Turna3
SaveWayPoint(SX3,SY3,2)
ElseIf map(SX3+1,SY3) = 1 Then
minuser2 = minuser2 - Turna3
SaveWayPoint(SX3,SY3,2)
EndIf
Case 3
If map(SX3,SY3+1) = 0 Then SY3 + 1
If map(SX3-Turna3,SY3) = 0 Then
minuser2 = minuser2 + Turna3
SaveWayPoint(SX3,SY3,2)
ElseIf map(SX3,SY3+1) = 1 Then
minuser2 = minuser2 - Turna3
SaveWayPoint(SX3,SY3,2)
EndIf
Case 4
If map(SX3-1,SY3) = 0 Then SX3 - 1
If map(SX3,SY3-Turna3) = 0 Then
minuser2 = minuser2 + Turna3
SaveWayPoint(SX3,SY3,2)
ElseIf map(SX3-1,SY3) = 1 Then
minuser2 = minuser2 - Turna3
SaveWayPoint(SX3,SY3,2)
EndIf
End Select
colo = Timer() Mod 255
Color colo,colo,colo
Box 1+sx2*Tilesize,1+sy2*Tilesize,Tilesize-1,Tilesize-1
Box 1+sx3*Tilesize,1+sy3*Tilesize,Tilesize-1,Tilesize-1
DrawScreen OFF
Wend
If SX2 = SX And SY2 = SY Then
For i = 0 To WayPoints2
If Waypoint(i,1,0) = -1 Then Exit
SaveWayPoint(Waypoint(i,1,0),Waypoint(i,1,1))
Next i
SaveWayPoint(SX2,SY2)
EndIf
If SX3 = SX And SY3 = SY Then
For i = 0 To WayPoints3
If Waypoint(i,2,0) = -1 Then Exit
SaveWayPoint(Waypoint(i,2,0),Waypoint(i,2,1))
Next i
SaveWayPoint(SX3,SY3)
EndIf
Else
SaveWayPoint(SX,SY)
EndIf
Gogigator = 0
EndIf
For i = 0 To 4
If Moved(i) > 0 Then Moved(i) = Moved(i) - 1
Next i
colo = Timer() Mod 255
Color colo,colo,colo
If Gogigator = 0 Then Box 1+sx*Tilesize,1+sy*Tilesize,Tilesize-1,Tilesize-1
DrawScreen OFF
Wend
SaveWayPoint(EX,EY)
End Function
Function SaveWayPoint(X,Y,Space=0)
Select Space
Case 0
Waypoint(WayPoints,Space,0) = X
Waypoint(WayPoints,Space,1) = Y
WayPoints + 1
Case 1
Waypoint(WayPoints2,Space,0) = X
Waypoint(WayPoints2,Space,1) = Y
WayPoints2 + 1
Case 2
Waypoint(WayPoints3,Space,0) = X
Waypoint(WayPoints3,Space,1) = Y
WayPoints3 + 1
End Select
End Function
Edit: Enteristä laskee reitin ja hiirellä voit luoda ja poistaa esteitä