From 918f3ec8731cc7d4eb84387668f33a955370feae Mon Sep 17 00:00:00 2001 From: BirDt_ Date: Tue, 21 Apr 2026 17:33:32 +0800 Subject: [PATCH] Draw tic-tac-toe squares --- engine/drawing.scm | 22 ++++++---- samples/tic-tac-toe.scm | 92 +++++++++++++++++++++++++++++++++-------- 2 files changed, 89 insertions(+), 25 deletions(-) diff --git a/engine/drawing.scm b/engine/drawing.scm index b3bc88c..1b23039 100644 --- a/engine/drawing.scm +++ b/engine/drawing.scm @@ -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))) -) + ) diff --git a/samples/tic-tac-toe.scm b/samples/tic-tac-toe.scm index f929e93..0cc9eb8 100644 --- a/samples/tic-tac-toe.scm +++ b/samples/tic-tac-toe.scm @@ -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 + '( ) + (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 + (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 - - (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)))) + draw-rectangles + draw-grid-squares + click-buttons + push-actions + + (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