Программирование компьютерных игр в Common Lisp при помощи lispbuilder-sdl
2012.01.12
Сегодня сбылась мечта идиота: нашёл пакет для графики в Common Lisp, с помощью которого можно рисовать игры с графикой и звуком. Это не GUI пакет с виджетами, это 2D/3D канва и инициализаторы для звука, джойстика и CDROM. Пакет называется lispbuilder-sdl, и он крут.
Как обычно, напомню для себя, как lispbuilder-sdl
подключается в SBCL.
Написание программы, использующей lispbuilder-sdl
На странице Using Lispbuilder SDL приведён пример того, как оформлять игровую main loop, используя этот пакет. Однако, полезным будет напомнить процесс собственно работы с этим кодом до того момента, когда на экране, наконец-то, появится окно с демо-игрой.
Во-первых, нужно загрузить сам lispbuilder-sdl. Я это сделал с помощью
quicklisp, так что, понятное дело, чтобы
следовать дальнейшим инструкциям, к лиспу должен быть подключен
quicklisp
.
Во-вторых, нужно разместить код примера
в файле. Допустим, файл называется sdl-trivial.lisp
. После этого, в
начале файла нужно приписать загрузку lispbuilder-sdl и инициализацию
пакета, внутри которого разместим наш код:
(ql:quickload :lispbuilder-sdl)
(defpackage :sdl-trivial
(:use :lispbuilder-sdl :common-lisp))
(in-package :sdl-trivial)
;; Код примера вставляется сюда ;;
Всё, можно запускать. Переходим в каталог с файлом sdl-trivial.lisp
и
запускаем в этом каталоге свой лисп, у меня это sbcl
:
$ cd путь/до/sdl-trivial.lisp
$ sbcl
Переходить в каталог с файлом нужно, чтобы не пришлось писать полный путь до него внутри самого sbcl.
В лиспе загружаем наш файл и обязательно заходим в наш новый пакет, определённый в sdl-trivial.lisp. После этого можно запускать базовую функцию примера.
(load "sdl-trivial.lisp")
(in-package :sdl-trivial)
(mouse-rect-2d)
Как посмотреть на возможности lispbuilder-sdl двумя строчками кода
На странице мануала lispbuilder-sdl есть раздел с готовыми примерами. Если неохота возиться с примером, описанным выше, то можно просто сделать внутри лиспа следующее (при наличии установленного quicklisp):
(ql:quickload :lispbuilder-sdl-examples)
(SDL-EXAMPLES:DISTANCE-2D)