時間の関係(速度と移動)で重力の影響を計算するために時間を使用するゲームを作成しました。ゲームは主に r5rs 関数を使用しますが、ラケットで定義されている時間を更新および記憶するためにthread
、およびその他の関数を使用しました。sleep
ここで、r5rs しか利用できないマイクロコントローラーでゲームを動作させたいと考えています。r5rsだけを使って似たようなものを作ることは可能ですか?
これは私が現在使用しているコードです(これはラケット関数を使用しています):
(define (make-timer)
(define time 0)
(define wait-time (/ 1 CPU_FREQ))
(define timer-thread
(thread (lambda ()
(let loop ()
(sleep wait-time)
(set! time (+ 1 time))
(loop)))))
(define (dispatch msg)
(cond ((eq? msg 'time) time)
((eq? msg 'start)
(thread-resume timer-thread))
((eq? msg 'restart)
(set! time 0)
(thread-resume timer-thread))
((eq? msg 'reset)
(thread-suspend timer-thread)
(set! time 0))
((eq? msg 'stop) (thread-suspend timer-thread))
((eq? msg 'set-period!)
(lambda (period)
(set! wait-time (* (+ period 1) (/ 1 CPU_FREQ)))))
))
(thread-suspend timer-thread)
(set! time 0)
dispatch)