make gui even hackier but now I can load game logs in it.
This is intended to be the limit to GUI functions. It's just a viewer. I hope it stays that way, I'm going to work on players now.
This commit is contained in:
parent
c62d8a1653
commit
8d12489acb
72
gui.rkt
72
gui.rkt
|
@ -1,5 +1,11 @@
|
||||||
#lang racket
|
#lang racket
|
||||||
|
|
||||||
|
(define game (GameState (grid '() 6 6) 0 '(0 0) (list (player "None" 0) (player "None" 0))))
|
||||||
|
(define g 0)
|
||||||
|
(define w 6)
|
||||||
|
(define h 6)
|
||||||
|
(define t 0)
|
||||||
|
|
||||||
(require "main.rkt" racket/gui)
|
(require "main.rkt" racket/gui)
|
||||||
|
|
||||||
; Line -> String
|
; Line -> String
|
||||||
|
@ -12,29 +18,54 @@
|
||||||
(point-x (line-to l))
|
(point-x (line-to l))
|
||||||
(point-y (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 (load-game-gui! ng)
|
||||||
(define g (grid-lines (GameState-grid game)))
|
(set! game ng)
|
||||||
(define w (grid-width (GameState-grid game)))
|
(set! g (grid-lines (GameState-grid ng)))
|
||||||
(define h (grid-height (GameState-grid game)))
|
(set! w (grid-width (GameState-grid ng)))
|
||||||
(define t 0)
|
(set! h (grid-height (GameState-grid ng)))
|
||||||
(define frame (new frame%
|
(set! t 0))
|
||||||
[label "Game Analysis"]
|
|
||||||
|
(load-game-gui! game)
|
||||||
|
|
||||||
|
(define (status-label game)
|
||||||
|
(format "~a vs ~a, ~a:~a"
|
||||||
|
(player-name (first (GameState-players game)))
|
||||||
|
(player-name (last (GameState-players game)))
|
||||||
|
(first (GameState-scores game)) (last (GameState-scores game))))
|
||||||
|
|
||||||
|
(define frame (new frame%
|
||||||
|
[label "DBN Viewer"]
|
||||||
[width 300]
|
[width 300]
|
||||||
[height 300]))
|
[height 300]))
|
||||||
|
|
||||||
(define displaypanel (new horizontal-panel% [parent frame]))
|
(define menu-bar (new menu-bar%
|
||||||
(define grid-canvas (new canvas%
|
[parent frame]))
|
||||||
|
|
||||||
|
(define file-menu (new menu%
|
||||||
|
(label "&File")
|
||||||
|
(parent menu-bar)))
|
||||||
|
|
||||||
|
(new menu-item%
|
||||||
|
[label "&Load"]
|
||||||
|
[parent file-menu]
|
||||||
|
[callback (lambda (m event)
|
||||||
|
(let ([f (get-file "Load Game")]) ;#f #f #f ".dbn" '() '(("*.dbn" "Dots and Boxes Notation")))])
|
||||||
|
(if (eq? #f f) 0 (load-game-gui! (load-game! f)))
|
||||||
|
(send grid-canvas refresh)
|
||||||
|
(send log set (map line->string g))
|
||||||
|
(send score set-label (status-label game))
|
||||||
|
(set! t 0)))])
|
||||||
|
|
||||||
|
(define displaypanel (new horizontal-panel% [parent frame]))
|
||||||
|
(define grid-canvas (new canvas%
|
||||||
[parent displaypanel]
|
[parent displaypanel]
|
||||||
[paint-callback
|
[paint-callback
|
||||||
(lambda (canvas dc)
|
(lambda (canvas dc)
|
||||||
(send dc clear)
|
(send dc clear)
|
||||||
(render-grid (grid (take g t) w h) dc))]))
|
(render-grid (grid (take g t) w h) dc))]))
|
||||||
|
|
||||||
(define log (new list-box%
|
(define log (new list-box%
|
||||||
[label ""]
|
[label ""]
|
||||||
[parent displaypanel]
|
[parent displaypanel]
|
||||||
[choices (map line->string g)]
|
[choices (map line->string g)]
|
||||||
|
@ -42,12 +73,12 @@
|
||||||
(set! t (car (send box get-selections)))
|
(set! t (car (send box get-selections)))
|
||||||
(send grid-canvas refresh))]))
|
(send grid-canvas refresh))]))
|
||||||
|
|
||||||
(define buttonpanel (new horizontal-panel%
|
(define buttonpanel (new horizontal-panel%
|
||||||
[parent frame]
|
[parent frame]
|
||||||
; [alignment '(center center)]
|
; [alignment '(center center)]
|
||||||
[stretchable-height #f]
|
[stretchable-height #f]
|
||||||
))
|
))
|
||||||
(define backbutton (new button%
|
(define backbutton (new button%
|
||||||
[parent buttonpanel]
|
[parent buttonpanel]
|
||||||
[label "back"]
|
[label "back"]
|
||||||
[callback (lambda (button state)
|
[callback (lambda (button state)
|
||||||
|
@ -55,7 +86,7 @@
|
||||||
(set! t (sub1 t)) 0)
|
(set! t (sub1 t)) 0)
|
||||||
(send log select (- t 1))
|
(send log select (- t 1))
|
||||||
(send grid-canvas refresh))]))
|
(send grid-canvas refresh))]))
|
||||||
(define forwardbutton (new button%
|
(define forwardbutton (new button%
|
||||||
[parent buttonpanel]
|
[parent buttonpanel]
|
||||||
[label "forward"]
|
[label "forward"]
|
||||||
[callback (lambda (button state)
|
[callback (lambda (button state)
|
||||||
|
@ -63,10 +94,9 @@
|
||||||
(set! t (add1 t)) 0)
|
(set! t (add1 t)) 0)
|
||||||
(send log select (- t 1))
|
(send log select (- t 1))
|
||||||
(send grid-canvas refresh))]))
|
(send grid-canvas refresh))]))
|
||||||
(define score (new message%
|
(define score (new message%
|
||||||
[parent buttonpanel]
|
[parent buttonpanel]
|
||||||
[label (format "Final Score: R: ~a, B: ~a" (first (GameState-scores game)) (last (GameState-scores game)))]))
|
[label (status-label game)]))
|
||||||
(send frame show #t))
|
|
||||||
|
|
||||||
(define g (load-game! "/tmp/test.dbn"))
|
|
||||||
(analysis-gui g)
|
(send frame show #t)
|
||||||
|
|
6
main.rkt
6
main.rkt
|
@ -203,6 +203,12 @@
|
||||||
(if box p (abs (- p 1)))
|
(if box p (abs (- p 1)))
|
||||||
(if box (list-set scores p (+ boxes (list-ref scores p))) scores) (GameState-players s))))])))
|
(if box (list-set scores p (+ boxes (list-ref scores p))) scores) (GameState-players s))))])))
|
||||||
|
|
||||||
|
; player player Number Number -> GameState
|
||||||
|
; convenience function for play-game.
|
||||||
|
; numbers are grid dimensions
|
||||||
|
(define (start-game p1 p2 grid1 grid2)
|
||||||
|
(play-game (GameState (grid '() grid1 grid2) 0 '(0 0) (list p1 p2))))
|
||||||
|
|
||||||
; Grid -> Image
|
; Grid -> Image
|
||||||
; renders grid to an image for showing humans the game.
|
; renders grid to an image for showing humans the game.
|
||||||
(define (render-grid-bitmap g)
|
(define (render-grid-bitmap g)
|
||||||
|
|
Loading…
Reference in New Issue