Implement a simple tic-tac-toe sample #16
2 changed files with 89 additions and 25 deletions
|
|
@ -258,13 +258,19 @@
|
|||
(assert ((conjoin integer? positive?) thickness))
|
||||
(assert (boolean? filled))
|
||||
(assert (color? color))
|
||||
(when filled
|
||||
(draw-rectangle
|
||||
(number->integer (v-x pos-vec))
|
||||
(number->integer (v-y pos-vec))
|
||||
width
|
||||
height
|
||||
(use-color color))))
|
||||
(if filled
|
||||
(draw-rectangle
|
||||
(number->integer (v-x pos-vec))
|
||||
(number->integer (v-y pos-vec))
|
||||
width
|
||||
height
|
||||
(use-color color))
|
||||
(draw-rectangle-lines
|
||||
(number->integer (v-x pos-vec))
|
||||
(number->integer (v-y pos-vec))
|
||||
width
|
||||
height
|
||||
(use-color color))))
|
||||
|
||||
(define (draw-text-2d pos-vec text size tint)
|
||||
(assert (vec2? pos-vec))
|
||||
|
|
@ -276,4 +282,4 @@
|
|||
(number->integer (v-y pos-vec))
|
||||
size
|
||||
(use-color tint)))
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -85,25 +85,83 @@
|
|||
((button-on-click btn)))))
|
||||
buttons)))))
|
||||
|
||||
(define grid '((0 0 0)
|
||||
(0 0 0)
|
||||
(0 0 0)))
|
||||
|
||||
(define turn 'player) ;; Either 'player or 'bot
|
||||
|
||||
(define grid-square-size (vec 150 150))
|
||||
|
||||
(define padding (vec 50 50))
|
||||
|
||||
(define draw-grid-squares
|
||||
(make-system
|
||||
'draw-grid-squares
|
||||
0
|
||||
'entity
|
||||
'(<screen-transform> <grid-square>)
|
||||
(lambda (_ transform sq)
|
||||
(let ((check (list-ref (list-ref grid (g-y sq)) (g-x sq))))
|
||||
(push-render-object 'screen
|
||||
0
|
||||
(lambda ()
|
||||
(draw-text-2d
|
||||
(v+ (v/ grid-square-size 4) (position transform))
|
||||
(cond
|
||||
((= check 1) "X")
|
||||
((= check 2) "O")
|
||||
(else ""))
|
||||
64
|
||||
(make-color 0 0 0 1))))))))
|
||||
|
||||
(define-record-type <grid-square>
|
||||
(make-g-s x y)
|
||||
grid-square?
|
||||
(x g-x)
|
||||
(y g-y))
|
||||
|
||||
(define (make-grid-square x y)
|
||||
(entity
|
||||
(make-g-s x y)
|
||||
(make-screen-transform
|
||||
(v+ padding (v* (vec x y) grid-square-size))
|
||||
(vec 0 0)
|
||||
0
|
||||
(vec 1 1)
|
||||
'center
|
||||
'())
|
||||
(make-visual-2d
|
||||
(make-rectangle-2d
|
||||
(vec 0 0)
|
||||
(v-x grid-square-size)
|
||||
(v-y grid-square-size)
|
||||
#f
|
||||
10)
|
||||
(make-color 0 0 0 1)
|
||||
0)
|
||||
(make-button-region
|
||||
(vec 0 0)
|
||||
grid-square-size
|
||||
(lambda ()
|
||||
(set! (list-ref (list-ref grid y) x) (+ 1 (list-ref (list-ref grid y) x)))))))
|
||||
|
||||
(define (game)
|
||||
(scene
|
||||
draw-text-entities
|
||||
draw-rectangles
|
||||
draw-grid-squares
|
||||
click-buttons
|
||||
push-actions
|
||||
|
||||
(entity
|
||||
(make-screen-transform
|
||||
(vec 350 250)
|
||||
(vec 0 0)
|
||||
0
|
||||
(vec 1 1)
|
||||
'center
|
||||
'())
|
||||
(make-visual-2d
|
||||
(make-text-2d
|
||||
(vec 0 0)
|
||||
"You lost the game!"
|
||||
12)
|
||||
(make-color 0 0 0 1)
|
||||
0))))
|
||||
(make-grid-square 0 0)
|
||||
(make-grid-square 1 0)
|
||||
(make-grid-square 2 0)
|
||||
(make-grid-square 0 1)
|
||||
(make-grid-square 1 1)
|
||||
(make-grid-square 2 1)
|
||||
(make-grid-square 0 2)
|
||||
(make-grid-square 1 2)
|
||||
(make-grid-square 2 2)))
|
||||
|
||||
(define (main-menu)
|
||||
(scene
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue