add GUI game analysis tool

This commit is contained in:
Nico 2022-04-03 20:26:47 +01:00
parent c30969c5cc
commit e26d465c0e
1 changed files with 68 additions and 0 deletions

68
gui.rkt Normal file
View File

@ -0,0 +1,68 @@
#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)