#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 (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 (new canvas% [parent displaypanel] [paint-callback (lambda (canvas dc) (send dc clear) (render-grid (take g t) 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 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 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 refresh))])) (send frame show #t)) (define g (play-game (GameState '() 0 '(0 0)) (list random-player random-player))) (print (GameState-grid g)) (analysis-gui g)