summaryrefslogtreecommitdiff
path: root/2d/game.scm
blob: cb043ecaf687bddcd58143fc407a9cc04b2a2b80 (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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
;;; guile-2d
;;; Copyright (C) 2013 David Thompson <dthompson2@worcester.edu>
;;;
;;; Guile-2d is free software: you can redistribute it and/or modify it
;;; under the terms of the GNU Lesser General Public License as
;;; published by the Free Software Foundation, either version 3 of the
;;; License, or (at your option) any later version.
;;;
;;; Guile-2d is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;;; Lesser General Public License for more details.
;;;
;;; You should have received a copy of the GNU Lesser General Public
;;; License along with this program.  If not, see
;;; <http://www.gnu.org/licenses/>.

;;; Commentary:
;;
;; Game data structure.
;;
;;; Code:

(define-module (2d game)
  #:use-module (srfi srfi-9)
  #:use-module (2d game-loop)
  #:use-module (2d window)
  #:use-module (2d vector2))

;;;
;;; Games
;;;

(define-record-type <game>
  (%make-game title resolution fullscreen first-scene)
  game?
  (title game-title)
  (resolution game-resolution)
  (fullscreen game-fullscreen?)
  (first-scene game-first-scene))

(define* (make-game #:optional #:key
                    (title "A Guile-2D Game")
                    (resolution (vector2 640 480))
                    (fullscreen #f)
                    (first-scene #f))
  "Return a new game. All game properties have some reasonable default
value."
  (%make-game title resolution fullscreen first-scene))

(define-syntax-rule (define-game name kwargs ...)
  "Syntactic sugar for define and make-game."
  (define name (make-game kwargs ...)))

(define (run-game game)
  "Open a window and start playing GAME."
  (open-window (game-title game)
               (game-resolution game)
               (game-fullscreen? game))
  (run-game-loop)
  (close-window))

(export <game>
        make-game
        define-game
        game?
        game-title
        game-resolution
        game-fullscreen?
        game-first-scene
        run-game)