#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
изменил бы это на перспективу цели, а не стрелка.