NetLogo墙面碰撞-“弹跳"功能 [英] NetLogo wall collision - 'bounce' function

查看:182
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆