Хранение значения - PullRequest
       9

Хранение значения

0 голосов
/ 25 сентября 2019

Имитация классной комнаты, в которой приборы (например, вентиляторы и кондиционеры) включаются, когда ученик сидит рядом с ним.Каждое устройство имеет свою номинальную мощность.Когда прибор включен, его цвет меняется на зеленый, отмечается время включения, а продолжительность времени сохраняется.Но если ученик сидит рядом с прибором (например, светом), который уже включен.Продолжительность не должна быть сохранена, поскольку это будет повторение.

     globals[
          simulation-timer

     to appliance-on

           ask students [ ask lights in-radius 4
           [ifelse not already-on?
            [ set color green

            set light-on-time ticks
            set light-on-duration light-on-duration + (time - ticks)
            show (word "light on duration = " light-on-duration)
            set already-on? true] [
            set light-on-duration light-on-duration]]]

В этом коде длительность включения света не добавляется для всех источников света.Показана только индивидуальная продолжительность освещения.Как мне это исправить?Спасибо!

1 Ответ

0 голосов
/ 25 сентября 2019

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

globals [light-radius]

breed [students student]
students-own
[ desk
]

breed [lights light]
lights-own
[ on?
  turned-on
  duration-on
]

to setup
  clear-all
  set light-radius 3
  ask patches [ set pcolor white ]
  ask patches with [pxcor mod 3 = 0 and pycor mod 3 = 0]
  [ sprout-lights 1
    [ set size 0
      set on? false
      set pcolor gray
    ]
  ]

  reset-ticks
  ask n-of 30 patches
  [ sprout-students 1 
    [ set color blue
    ]
    ask lights in-radius light-radius [switch-light-on]
  ]
end

to go
  repeat 5 [student-arrive]
  repeat 5 [student-leave]
  ask lights with [any? students in-radius light-radius]
  [ switch-light-on
  ]
  tick
end

to student-arrive
  ask one-of patches with [not any? students-here]
  [ sprout-students 1
    [ set color blue
      ask lights in-radius light-radius with [not on?]
      [ switch-light-on
      ]
    ]
  ]
end

to switch-light-on
  set pcolor yellow
  set on? true
  set turned-on ticks
end

to student-leave
  ask one-of students
  [ die
  ]
  ask lights with [ on? and not any? students in-radius light-radius ]
  [ switch-light-off
  ]
end

to switch-light-off
  set pcolor gray
  set on? false
  type "previous duration: " print duration-on
  let how-long ticks + 1 - turned-on
  set duration-on duration-on + how-long
  type "new duration: " print duration-on
end

Обратите внимание, что на самом деле вы не можете видеть свет turtles, я делаю патч желтым для включения и серым для выключения,Каждый третий патч имеет свет.

...