blob: 07014d9787874a646670ac25b0e04a0942a0662d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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))))))))
|