Ниже я переформатировал ваш контрольный траффик c -lights код
to control-traffic-lights
if ticks mod (100) = 0
[ change-color lightsR ; red to yellow; others to red
change-color lightsL ; red to yellow; others to red
change-color lightsU ; red to yellow; others to red
change-color lightsD ; red to yellow; others to red
yellow-color lightsR ; yellow to green; others to yellow
yellow-color lightsL ; yellow to green; others to yellow
yellow-color lightsU ; yellow to green; others to yellow
yellow-color lightsD ; yellow to green; others to yellow
]
end
Представьте, что вы нажали соответствующую галочку (каждые 100), начните с lightsR - все, что красные, становятся желтыми на первой строке зеленеет на пятой строке. Если при входе они имеют любой цвет, кроме красного, они становятся красными в первой строке и желтыми в пятой.
Все четыре вида огней проходят одну и ту же логику c. То есть процедура желтого цвета немедленно применяется к источникам света в зависимости от цвета, который они выходят из процедуры изменения цвета.
ОБНОВЛЕНИЕ : я не внес никаких изменений в Ваш код, я просто отформатировал его так, чтобы его можно было прочитать, чтобы попытаться объяснить вашу проблему с логикой c.
Если они введены как красный, они изменятся на зеленый (через желтый) Если они введены как желтый, они выходят как желтый (через красный) Если они выходят как зеленый, они выходят как желтый (через красный)
Что вам нужно сделать, это изменить, когда выполняется процедура желтого цвета, так что это на несколько тиков позже другое изменение цвета, а не в том же тике.
Попробуйте изменить второй if ticks mod (100) = 0 [yellow-color l ...]
на if ticks > 10 and ticks mod (105) = 0 [yellow-color l ...]