Как мне проверить наличие столкновений между любыми двумя черепахами?

#netlogo

#netlogo

Вопрос:

Netlogo, честно говоря, очень странный для меня, но я пытался сделать Space Invaders для проекта. Мне нужно иметь возможность проверять расстояние между несколькими черепахами одной породы, чтобы выполнить проверку на столкновение. Как мне это сделать?

     to shoot
  ask turtle 0 [
    hatch 1
    [
      set shape "dot"
      set size 2
      set color red
      set ctrl "projectile"
      set xcor [xcor] of turtle 0
      set ycor [ycor] of turtle 0   2
      
      repeat 40
      [
        ifelse ycor < 15 and distancexy [xcor] of turtle 1 [ycor] of turtle 1 > 0.5
        [
          set ycor ycor   1
        ]
        [
          ifelse distancexy [xcor] of turtle 1 [ycor] of turtle 1 < 0.5
          [
            ask turtle 1 [die]die][die]
        ]
        wait .01
        
      ]
      
    ]
  ]
end
 

Комментарии:

1. Я не могу понять, что пытается сделать ваш код. Когда вы говорите «проверьте расстояние между несколькими черепахами», вы имеете в виду (1) вы хотите найти минимальное расстояние до других черепах (2) подсчитайте, сколько черепах находится на некотором расстоянии (3) убейте всех черепах на некотором расстоянии (4) поместите новую черепаху так, чтобы она была как минимумнекоторое расстояние от всех остальных (5) что-то еще?

2. я хочу, чтобы он проверял, находится ли какая-либо из черепах на расстоянии x, и убивал этих черепах. Извините за путаницу @JenB

Ответ №1:

Итак, вам нужно что-то вроде черепахи-героя, чтобы стрелять во всех черепах на некотором расстоянии. Я немного изменил ваш код, но основная идея звучит. На самом деле у вас не было шага для определения целей. Я также упростил движение, используя face и использовал a while , потому что нет гарантии, что для достижения цели потребуется 40 шагов.

 to shoot
  let shooter turtle 0   ; or however the shooter is selected
  ask shooter
  [ let targets other turtles with [distance myself < 0.5       ; finds the targets
    if any? targets
    [ let this-target one-of targets
      face this-target                 ; so shooter is facing the target so trail better
      ; do the shooting
      [ hatch 1
        [ set shape "dot"
          set size 2
          set color red
          set ctrl "projectile"
          let step-distance 0.02
          while distance this-target > step-distance
          [ face this-target            ; you don't need to worry about coordinates
            forward step-distance
            wait .01
          ]
          die                           ; once close enough, projectile dies
        ]
        ask this-target [ die ]         ; and kills the target
      ]
    ]
  ]
end
 

Этот код полностью не протестирован и нуждается в другом цикле для получения всех целевых объектов. Обычно вы не часто используете циклы в NetLogo, но an ask изменил бы это на перспективу цели, а не стрелка.