NetLogo wall collision - 'bounce' function
The NetLogo turtles keep going through the walls of the maze. How do I stop them from going through the walls and instead have them change direction?
I'm grateful for any help.
My code so far :
breed [ defaults default ]
defaults-own [ new-heading ]
breed [squares1 square]
breed [squares2 square]
breed [squares3 square]
globals [ score ]
to setup-row [row colour segments]
foreach segments
[
if pycor = row * row-patches-width and
(pxcor >= col-patches-width * (item 0 ?)) and (pxcor <= col-patches-width * (item 1 ?))
[set pcolor colour]
]
end
to setup-col [col colour segments]
foreach segments
[
if pxcor = col * col-patches-width and
(pycor >= row-patches-width * (item 0 ?)) and (pycor <= row-patches-width * (item 1 ?))
[set pcolor colour]
]
end
to setup-arwels-maze
clear-all
set score 0
setup-defaults
setup-squares1
setup-squares2
setup-squares3
ask patches
[ if (pxcor >= min-pxcor and pxcor <= max-pxcor and
pycor >= min-开发者_如何学Pythonpycor and pycor <= max-pycor)
[set pcolor black]
setup-row 8 white [[-15 15]]
setup-row 6 white [[-15 -10][10 15]]
setup-row 3 white [[-15 -10][10 15]]
setup-row 6 white [[-4 4]]
setup-row 4 white [[-6 6]]
setup-row -1 white [[-2 2]]
setup-row -3 white [[-4 4]]
setup-row 1 white [[-3 3]]
setup-row 0 white [[-15 -10][10 15]]
setup-row -4 white [[-15 -10][10 15]]
setup-row -7 white [[-15 -10][10 15]]
setup-row -6 white [[-3 -2][2 3]]
setup-row -9 white [[-3 3]]
setup-row -11 white [[-11 11]]
setup-row -13 white [[-15 15]]
setup-col 15 white [[ 0 8][-13 -4]]
setup-col 10 white [[-7 -4][0 3]]
setup-col 12 white [[ 3 4]]
setup-col 7 white [[-7.5 2][6 8]]
setup-col 3 white [[-9 -6][1 4]]
setup-col 0 white [[-3 -1]]
setup-col -3 white [[-9 -6][1 4]]
setup-col -7 white [[-7.5 2][6 8]]
setup-col -10 white [[-7 -4][0 3]]
setup-col -12 white [[ 3 4]]
setup-col -15 white [[ 0 8][-13 -4]]
]
end
to setup-defaults
create-defaults 1
[ set color yellow
set shape "default"
set size 4
setxy 2 -48
set heading 0
]
end
to setup-squares1
create-squares1 1
[
set shape "square"
set color random 14 * 10 + 5
set size 3
setxy 38 28
set heading 0
]
end
to setup-squares2
create-squares2 1
[
set shape "square"
set color random 14 * 10 + 5
set size 3
setxy -5 -8
set heading 0
]
end
to setup-squares3
create-squares3 1
[
set shape "square"
set color random 14 * 10 + 5
set size 3
setxy 40 -45
set heading 0
]
end
to move-up
ask defaults[ fd 1.00 ]
end
to move-right
ask defaults [ rt 90 ]
end
to move-down
ask defaults [ bk 1.00 ]
end
to move-left
ask defaults [ lt 90 ]
end
Thank you for your time and help.
You have to implement the bounce yourself. Your code does not do that. The turtles just move by 1 regardless of what is a ahead.
A simple bounce (like a ball, preserving incidence angle) function is:
to bounce
if [pcolor] of patch-at dx 0 = white [
set heading (- heading)
]
if [pcolor] of patch-at 0 dy = white [
set heading (180 - heading)
]
end
It bounces against white patches. Note that your turtle has to be 'heading' in the direction it is moving.
精彩评论