almost 6 years ago

Сегодня сбылась мечта идиота: нашёл пакет для графики в 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)
 
comments powered by Disqus