diff options
author | David Thompson <dthompson@member.fsf.org> | 2013-09-02 09:05:20 -0400 |
---|---|---|
committer | David Thompson <dthompson@member.fsf.org> | 2013-09-06 00:09:29 -0400 |
commit | f55eda46158010a533f7d69f63caa206ba408de1 (patch) | |
tree | 73d8590d9215e8b759926a00f4d49f99bd61ccf6 /2d | |
parent | 68a4a1ebd2f8286bc6190bdce976a1828da3aa8a (diff) |
Create (2d game) module.
Diffstat (limited to '2d')
-rw-r--r-- | 2d/game.scm | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/2d/game.scm b/2d/game.scm new file mode 100644 index 0000000..e20638c --- /dev/null +++ b/2d/game.scm @@ -0,0 +1,66 @@ +;;; 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) + #:export (<game> + make-game + define-game + game? + game-title + game-resolution + game-fullscreen? + game-first-scene + run-game)) + +(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)) |