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

Я хочу, чтобы черепаха двигалась случайным образом по экрану интерфейса, но мне нужно, чтобы черепаха заморозилась, если она приземлится на «патч опасности». Если черепаха не приземляется на «опасном пятне», она продолжает двигаться. Может кто-нибудь помочь мне разобраться?

1 Ответ

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

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

На каждом шаге go , если черепаха не замерзла, она может сделать шаг, а затем проверить цветпатч, чтобы увидеть, если он будет заморожен сейчас.

Когда каждая черепаха замерзнет, ​​остановитесь.

Приведенный ниже код выполнит это.


globals [  danger-color ]

turtles-own [
  frozen?       ;; each turtle needs its own true-false switch for whether it's frozen.
                ;; this is a true/false variable so the name ends with "?"
]

to setup
  clear-all           

  ;; pick a color you like for dangerous areas. I picked red.
  set danger-color red         

  ;; set the bottom half of the viewing area to the danger color
  no-display
     ask patches with [pycor < 0] [set pcolor danger-color ]
  display

  ;; create 2 big yellow turtles that are not frozen and move them up
  create-turtles 2 [ 
    set color yellow 
    set size 3 
    setxy random-pxcor 10    ;; put them somewhere on top half of the screen
    set frozen? FALSE        ;; initially all turtles are not frozen
  ]

  reset-ticks              
end

to go

  ;; see if there is any point in continuing to run
  if not any? turtles with [frozen? = FALSE] [stop ]

  ask turtles with [ frozen? = FALSE ]       
    [ 
      set heading random 360 
      forward 1  

      ;; and check to see if maybe NOW we should be frozen
      if  pcolor = danger-color   
      [ 
        set frozen? TRUE  
        set color blue
      ]
    ]


  tick
end

Обратите внимание, что я мог бы просто поставить "красный" вместо определенияОпасный цвет, который может сэкономить несколько нажатий клавиш, но также затруднит обновление и понимание кода.

, если pcolor = danger-color прояснит, для чего вы тестируете,где , если pcolor = red не так очевидно. Поверьте мне, через месяц, когда вы вернетесь к коду, вы оцените тот факт, что вы это сделали.

Использование такой переменной также означает, что если вы передумаете над тем, какой цвет должен представлять опасностьвам нужно всего лишь изменить это место в коде, и вы знаете, где это находится. «Красное» жестко запрограммированное в вашей программе несколько мест затрудняет поиск их для обновления и почти гарантирует, что вы пропустите один из них.

Оставьте комментарий, если это неясно, и я попытаюсь объяснитьлучше!

Веселитесь вместе с NetLogo! Спасибо за поиск ответа здесь!

...