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