NetLogo墙面碰撞-“弹跳"功能 [英] NetLogo wall collision - 'bounce' function
本文介绍了NetLogo墙面碰撞-“弹跳"功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
NetLogo龟不断穿过迷宫的壁.如何阻止他们穿过墙壁,而是改变方向?
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?
感谢您的帮助.
到目前为止我的代码:
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-pycor 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
感谢您的时间和帮助.
推荐答案
您必须自己实现弹跳.您的代码不这样做.无论前进的方向是多少,海龟只会移动1.
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.
这篇关于NetLogo墙面碰撞-“弹跳"功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文