More tweaks to comms for ui
This commit is contained in:
parent
b2444ace11
commit
748bbfdb3f
|
@ -12,6 +12,11 @@
|
||||||
(define peer-mark (if first? 'o 'x))
|
(define peer-mark (if first? 'o 'x))
|
||||||
(define %my-turn? first?)
|
(define %my-turn? first?)
|
||||||
(define my-turn+ (make-condition))
|
(define my-turn+ (make-condition))
|
||||||
|
(define (%state)
|
||||||
|
(cond
|
||||||
|
((board-winner? board mark) => 'won)
|
||||||
|
((board-winner? board peer-mark) => 'lost)
|
||||||
|
(else 'play)))
|
||||||
(define (switch-turn!)
|
(define (switch-turn!)
|
||||||
(set! %my-turn? (not %my-turn?))
|
(set! %my-turn? (not %my-turn?))
|
||||||
(when %my-turn? (signal-condition! my-turn+)))
|
(when %my-turn? (signal-condition! my-turn+)))
|
||||||
|
@ -28,11 +33,7 @@
|
||||||
[(try-transition) 'playing]
|
[(try-transition) 'playing]
|
||||||
[(my-turn?) %my-turn?]
|
[(my-turn?) %my-turn?]
|
||||||
[(my-mark) mark]
|
[(my-mark) mark]
|
||||||
[(state)
|
[(state) (%state)]
|
||||||
(cond
|
|
||||||
((board-winner? board mark) => 'won)
|
|
||||||
((board-winner? board peer-mark) => 'lost)
|
|
||||||
(else 'play))]
|
|
||||||
[(initialize!)
|
[(initialize!)
|
||||||
(on (<- peer 'try-transition) (λ (status) (format #t "Peer's status: ~a\n" status)) #:promise? #t)]
|
(on (<- peer 'try-transition) (λ (status) (format #t "Peer's status: ~a\n" status)) #:promise? #t)]
|
||||||
[(my-turn! x y)
|
[(my-turn! x y)
|
||||||
|
@ -42,5 +43,7 @@
|
||||||
(on (<- peer 'peer-turn! x y)
|
(on (<- peer 'peer-turn! x y)
|
||||||
(λ (_)
|
(λ (_)
|
||||||
(board-choose! board mark x y)
|
(board-choose! board mark x y)
|
||||||
(switch-turn!))))
|
(switch-turn!)
|
||||||
|
(%state))
|
||||||
|
#:promise? #t))
|
||||||
(error "It's not my turn."))]))
|
(error "It's not my turn."))]))
|
||||||
|
|
|
@ -12,13 +12,13 @@
|
||||||
;; Module for simple console-based UI (no curses)
|
;; Module for simple console-based UI (no curses)
|
||||||
|
|
||||||
;; A single run of the loop for a bespoke REPL for playing the game
|
;; A single run of the loop for a bespoke REPL for playing the game
|
||||||
(define (%loop board controller my-turn+)
|
(define (%loop vat b controller my-turn+)
|
||||||
(wait my-turn+)
|
(wait my-turn+)
|
||||||
(let ((state) ($ controller 'state))
|
(let ((state ($ controller 'state)))
|
||||||
(%print b state)
|
(%print b state)
|
||||||
(if (eq? state 'play)
|
(if (eq? state 'play)
|
||||||
(let ((coords (%read)))
|
(let ((coords (%read)))
|
||||||
(if coords (%eval move-ch coords) #f))
|
(if coords (%eval vat controller coords) #f))
|
||||||
#f)))
|
#f)))
|
||||||
|
|
||||||
(define (%read)
|
(define (%read)
|
||||||
|
@ -30,9 +30,12 @@
|
||||||
(%prompt) (%read))
|
(%prompt) (%read))
|
||||||
coords))))
|
coords))))
|
||||||
|
|
||||||
(define (%eval move-ch coordinates)
|
(define (%eval vat controller coordinates)
|
||||||
(format #t "Moving ~a\n" coordinates)
|
(format #t "Moving ~a\n" coordinates)
|
||||||
(put-message move-ch coordinates))
|
(with-vat
|
||||||
|
vat
|
||||||
|
(on (<- controller 'my-turn! coordinates)
|
||||||
|
(λ (state) (%display b state)))))
|
||||||
|
|
||||||
(define (%print b state)
|
(define (%print b state)
|
||||||
(%display b state)
|
(%display b state)
|
||||||
|
@ -42,14 +45,14 @@
|
||||||
|
|
||||||
(define (%display b state)
|
(define (%display b state)
|
||||||
(board-display b)
|
(board-display b)
|
||||||
(format #t "-> It is ~a turn!\n" (if %my-turn? "my" "peer's"))
|
(cond
|
||||||
(cond state
|
((eq? state 'won) => (format #t "*** I won! ***\n"))
|
||||||
('won => (format #t "*** I won! ***\n"))
|
((eq? state 'lost) => (format #t "*** I lost! ***\n"))))
|
||||||
('lost => (format #t "*** I lost! ***\n"))))
|
|
||||||
|
|
||||||
(define (begin-game-loop board controller my-turn+)
|
(define (begin-game-loop board controller my-turn+)
|
||||||
|
(define vat (spawn-vat #:name "UI"))
|
||||||
(spawn-fiber
|
(spawn-fiber
|
||||||
(λ ()
|
(λ ()
|
||||||
(while (%loop board controller my-turn+))
|
(while (%loop vat board controller my-turn+))
|
||||||
(format #t "bye-bye!\n")
|
(format #t "bye-bye!\n")
|
||||||
#f)))
|
#f)))
|
||||||
|
|
Loading…
Reference in New Issue