racket/collects/games/gobblet/gobblet.ss
2005-05-27 18:56:37 +00:00

63 lines
1.9 KiB
Scheme

(module gobblet mzscheme
(require (lib "unitsig.ss")
(lib "unit.ss")
(lib "file.ss")
(lib "mred.ss" "mred")
"sig.ss"
"model.ss"
"gui.ss"
"heuristics.ss"
"explore.ss"
"../show-help.ss")
(provide game-unit)
(define game-unit
(unit
(import)
(export)
(define (make-gobblet-unit size)
(compound-unit/sig
(import)
(link [CONFIG : config^ ((unit/sig config^
(import)
(define BOARD-SIZE size)))]
[RESTART : restart^ ((unit/sig restart^
(import)
(define (new-game n)
(put-preferences '(gobblet:board-size) (list n) void)
(parameterize ([current-eventspace orig-eventspace])
(queue-callback
(lambda ()
(start-gobblet n)))))
(define (show-gobblet-help)
(parameterize ([current-eventspace orig-eventspace])
(queue-callback
(lambda ()
(unless help
(set! help (show-help (list "games" "gobblet")
"Gobblet Help" #f)))
(help)))))))]
[MODEL : model^ (model-unit CONFIG)]
[HEURISTICS : heuristics^ (heuristics-unit CONFIG MODEL EXPLORE)]
[EXPLORE : explore^ (explore-unit CONFIG MODEL)]
[GUI : () (gui-unit CONFIG MODEL RESTART HEURISTICS EXPLORE)])
(export)))
(define help #f)
(define orig-eventspace (current-eventspace))
(define (start-gobblet board-size)
;; Start a new game as a child process:
(parameterize ([current-custodian (make-custodian)])
(parameterize ([exit-handler (lambda (v)
(custodian-shutdown-all (current-custodian)))])
(parameterize ([current-eventspace (make-eventspace)])
(queue-callback
(lambda ()
(invoke-unit/sig (make-gobblet-unit board-size))))))))
(start-gobblet (get-preference 'gobblet:board-size (lambda () 3))))))