Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Почему никто не использует для меня самого загадка, видимо думают, что сложно.
Куда лучше тратить свои усилия тоже думаю каждый сможет определить для себя сам.
Если брать коммерческую разработку игр, то там вопрос как по мне ни какой язык брать, а какой движок ).
Но в любом случае материалы про разработке игр на лиспе могут разжечь в ком то интерес к изучению лиспа именно сегодня :)
Вот если серьёзно, зачем использовать функциональный язык для программирования игр?
;;; http://www.gigamonkeys.com/book/object-reorientation-generic-functions.html
(defpackage #:ultra-game
(:use :common-lisp)
(:export :say-my-name :ship))
(in-package :ultra-game)
(defclass point ()
((x
:initform 0
:accessor point-x)
(y
:initform 0
:accessor point-y)))
(defclass entity (point)
((name
:initarg :name
:initform (error "Must supply a name")
:accessor entity-name)))
(defgeneric say-my-name (entity)
(:documentation "Print entity name to the *standard-output*"))
(defmethod say-my-name ((entity entity))
(format *standard-output* "My name is ~a~%" (entity-name entity)))
(defclass engine ()
((angle
:initform 0
:accessor engine-angle)
(acceleration
:initform 9000
:accessor engine-acceleration)))
(defclass ship (entity engine)
((cost
:initform 0)))
(defmethod say-my-name ((ship ship))
(with-slots (name acceleration) ship
(format *standard-output* "Colonial spaceship ~a; Acceleration: ~a~%" name acceleration)))
;;; usage example
(in-package :cl-user)
(let ((ship (make-instance 'ultra-game:ship :name "Foo")))
(ultra-game:say-my-name ship))
;; output:
;; Colonial spaceship Foo; Acceleration: 9000
;; My name is Alarm!
;; note '::'
(let ((entity (make-instance 'ultra-game::entity :name "Alarm!")))
(ultra-game:say-my-name entity))
;; output:
;; My name is Alarm!
Common Lisp SDL2 туториал