Draw tic-tac-toe squares

This commit is contained in:
BirDt_ 2026-04-21 17:33:32 +08:00
parent 0544429d07
commit 918f3ec873
2 changed files with 89 additions and 25 deletions

View file

@ -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)))
)
)

View file

@ -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