Игры на Scheme(Lisp) в среде DrRacket
Комментарии (2)
18 июня 2017 в 19:10 (комментарий был изменён)
0↑
↓
s — это переменная, отвечающая за цвет. Переход в другое состояние можно представить
следующей конструкцией(define (traffic-light-next s) (cond [(string=? "red" s) "green"] [(string=? "green" s) "yellow"] [(string=? "yellow" s) "red"]))
Но ведь светлофор работает в режимеЗеленый => Желтый => Красный => Желтый => повторить
А не в режимеЗеленый => Желтый => Красный => повторить
То есть Зеленый и Красный переходят в Желтый. А вот Желтый может перейти и в Зеленый и в Красный.
Выглядит, словно вы подгоняете реальность под ограничения архитектуры. Ведь функцию только от текущего состояния написать легче, чем от текущего+предыдущего. И это на столь легком примере!
18 июня 2017 в 19:13
0↑
↓
Кстати, я, конечно, понимаю, что в данном конкректном примере это очень легко пофиксить введя два разных «желтых»: «yellow-before-red» и «yellow-before-green» и машина состояний останется такой же простой, но это ведь абстрактный пример, а в играх очень редко бывает возможность обойтись таким простым решением.