From f55eda46158010a533f7d69f63caa206ba408de1 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 2 Sep 2013 09:05:20 -0400 Subject: Create (2d game) module. --- 2d/game.scm | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 2d/game.scm 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 +;;; +;;; 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 +;;; . + +;;; 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 ( + make-game + define-game + game? + game-title + game-resolution + game-fullscreen? + game-first-scene + run-game)) + +(define-record-type + (%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)) -- cgit v1.2.3