Как я могу сказать черепахам, чтобы не наступать на определенные участки? - PullRequest
0 голосов
/ 06 ноября 2019

В настоящее время я имитирую модель пожарной эвакуации, я пытался сказать черепахам входить в выходы, не наступая на черные участки, но мой код не работает должным образом.

Это код, которым я былс помощью проблемы thjs: Go

 ask people
  [face one-of patches with [pycor <= -24  and pycor >= -30  and 
  pxcor <= 26  and pxcor >= 20 ]
  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 ]
tick
end

to avoid-black

 ask people [
 if [pcolor] of patch-ahead 0.5 = grey - 3
 [ set heading ( - heading ) fd 0.5 ]]
 end

1 Ответ

0 голосов
/ 07 ноября 2019

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

...