Ave555, привет! Вы пришли в нужное место, чтобы получить помощь!
У вашего кода есть несколько разных проблем.
черный цвет не совпадает с "серый - 2"поэтому ваш тест на черный цвет может не сработать, в зависимости от того, как вы установили цвета патчей на вашей стене.
команда "избежать-черный" никогда не вызывается на вашем шаге "go", поэтому она имеетбез эффекта
Я предполагаю, что вы установили экран больше, чем по умолчанию, который имеет координаты от -16 до 16, или ваш тест для исправлений около 32 не удастся.
Возможно, вы еще не забыли попросить окно просмотра не оборачивать. Вы должны установить это, или вы получите очень странное поведение. (попробуйте)
Кстати, установка заголовка на -heading не то, что вы хотите. Заголовок - это угол. Вы хотите вычесть 180 из него в обратном направлении. Или добавьте 180.
Попробуйте следующий код. Шаг за шагом, как написано, и вы можете видеть, что это в основном работает. Черный обнаружен, и человек поворачивается на 180 градусов и прыгает на 5 шагов! Пока все хорошо.
Но потом они просто поворачиваются и возвращаются в стену, потому что ничто не говорит им не делать этого.
Код ниже очень подробный. Выполните один шаг за шагом и посмотрите результат. Он говорит вам, на что смотрит код решения «избегай черный».
Надеюсь, это поможет!
;; This code is incomplete but should make it easier to see why the people are not going where you expect
breed [people person]
people-own [ points]
to setup
clear-all
ask patches [ set pcolor white]
ask patches with [pycor < -5] [ set pcolor black ]
create-people 1 [ setxy random-pxcor 5 set points random 2 set color green set size 3 ]
reset-ticks
end
to go
let chosen-patch one-of patches with [pycor <= -12 and pycor >= -15 and
pxcor <= 15 and pxcor >= 10 ]
ask chosen-patch [ set pcolor red]
ask people
[
face chosen-patch
fd 0.5 ]
ask people with [ points = 1 ] [ set color pink ]
ask people with [ points = 0 ] [ set color red ]
ask people with [ color = red ] [ fd 0 ]
avoid-black
tick
end
to avoid-black
;; note: grey -3 is 2. black is zero.
;;let wall-color grey - 3
let wall-color black
ask people [
print " "
type ticks type ", pcolor of patch-ahead is " type [pcolor] of patch-ahead 0.5 type ", and wall-color is " print wall-color
if-else ([pcolor] of patch-ahead 0.5 = wall-color)
[ print "test succeded, wall ahead, reverse and jump"
set heading ( heading - 180 ) fd 5]
[ print "test failed, no wall ahead. Keep going." ]
]
end