72 lines
2.8 KiB
Racket
72 lines
2.8 KiB
Racket
#lang racket
|
|
|
|
(require "main.rkt" racket/gui)
|
|
|
|
; Line -> String
|
|
; Converts a line to a string for the list
|
|
(define (line->string l)
|
|
(format "~a : ~a,~a-~a,~a"
|
|
(if (= (line-player l) 0) "R" "B")
|
|
(point-x (line-from l))
|
|
(point-y (line-from l))
|
|
(point-x (line-to l))
|
|
(point-y (line-to l))))
|
|
|
|
; GameState
|
|
; opens a window to analyse game.
|
|
(define (analysis-gui game)
|
|
|
|
; Make a frame by instantiating the frame% class
|
|
(define g (grid-lines (GameState-grid game)))
|
|
(define w (grid-width (GameState-grid game)))
|
|
(define h (grid-height (GameState-grid game)))
|
|
(define t 0)
|
|
(define frame (new frame%
|
|
[label "Game Analysis"]
|
|
[width 300]
|
|
[height 300]))
|
|
|
|
(define displaypanel (new horizontal-panel% [parent frame]))
|
|
(define grid-canvas (new canvas%
|
|
[parent displaypanel]
|
|
[paint-callback
|
|
(lambda (canvas dc)
|
|
(send dc clear)
|
|
(render-grid (grid (take g t) w h) dc))]))
|
|
|
|
(define log (new list-box%
|
|
[label ""]
|
|
[parent displaypanel]
|
|
[choices (map line->string g)]
|
|
[callback (lambda (box event)
|
|
(set! t (car (send box get-selections)))
|
|
(send grid-canvas refresh))]))
|
|
|
|
(define buttonpanel (new horizontal-panel%
|
|
[parent frame]
|
|
; [alignment '(center center)]
|
|
[stretchable-height #f]
|
|
))
|
|
(define backbutton (new button%
|
|
[parent buttonpanel]
|
|
[label "back"]
|
|
[callback (lambda (button state)
|
|
(if (not (= t 0))
|
|
(set! t (sub1 t)) 0)
|
|
(send log select (- t 1))
|
|
(send grid-canvas refresh))]))
|
|
(define forwardbutton (new button%
|
|
[parent buttonpanel]
|
|
[label "forward"]
|
|
[callback (lambda (button state)
|
|
(if (not (= t (length g)))
|
|
(set! t (add1 t)) 0)
|
|
(send log select (- t 1))
|
|
(send grid-canvas refresh))]))
|
|
(define score (new message%
|
|
[parent buttonpanel]
|
|
[label (format "Final Score: R: ~a, B: ~a" (first (GameState-scores game)) (last (GameState-scores game)))]))
|
|
(send frame show #t))
|
|
|
|
(define g (load-game! "/tmp/test.dbn"))
|
|
(analysis-gui g) |