From 38eee24832fe6da4f135cae455881ab97953b23a Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Sat, 18 Apr 2026 02:47:10 +0100 Subject: Refresh docs and re-indent --- demo/getting-started.scm | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 demo/getting-started.scm (limited to 'demo/getting-started.scm') diff --git a/demo/getting-started.scm b/demo/getting-started.scm new file mode 100644 index 0000000..07014d9 --- /dev/null +++ b/demo/getting-started.scm @@ -0,0 +1,50 @@ +;; Getting-started demo: a blue square you can move with arrow keys. +;; The companion walkthrough in docs/guide.org builds this file step by step. + +(import scheme + (chicken base) + (only (list-utils alist) plist->alist) + downstroke-engine + downstroke-world + downstroke-entity + downstroke-input + downstroke-scene-loader) + +(define +speed+ 2) + +(define (make-player) + (plist->alist + (list #:type 'player + #:x 150 #:y 100 + #:width 32 #:height 32 + #:color '(100 160 255)))) + +(define (move-player player input) + (let* ((x (entity-ref player #:x 0)) + (y (entity-ref player #:y 0)) + (dx (cond ((input-held? input 'left) (- +speed+)) + ((input-held? input 'right) +speed+) + (else 0))) + (dy (cond ((input-held? input 'up) (- +speed+)) + ((input-held? input 'down) +speed+) + (else 0)))) + (entity-set (entity-set player #:x (+ x dx)) #:y (+ y dy)))) + +(game-run! + (make-game + title: "Getting Started" + width: 320 height: 240 + + create: (lambda (game) + (game-scene-set! game + (make-sprite-scene + entities: (list (make-player)) + background: '(20 22 30)))) + + update: (lambda (game dt) + (let* ((scene (game-scene game)) + (input (game-input game)) + (player (car (scene-entities scene)))) + (game-scene-set! game + (update-scene scene + entities: (list (move-player player input)))))))) -- cgit v1.2.3