;; і працює на більшості систем. У випадку проблеми
;; з установкою цього режиму необхідно вибрати
;; значення цієї змінної в Відповідно до документації
;; на обладнання.
;;
( defvar * VMode * 18); Відео режим за замовчуванням
( defvar * MaxX * 640) ; Максимальна ширина екрану за замовчуванням
( defvar * MaxY * 480) ; Максимальна висота екрана за замовчуванням
( defvar * SquareSize * 256); Розмір області для побудови
;;
;; Функція ініціалізує графічний режим, встановлює змінні
;; * MaxX ** MaxY ** SquareSize * в відповідності з обраним режимом
;;
(
defun InitGraph ()
(
case * VMode *
(4; 320x200 Color
( mode 4)
( setq * MaxX * 320 * MaxY * 200 * SquareSize * 128))
(16; 640x350 Color
( mode 16)
( setq * MaxX * 640 * MaxY * 350 * SquareSize * 128))
(18; 640x480 Color
( mode 18))
(106; 800x600 Color
( mode +106106800600)
( setq * MaxX * 800 * MaxY * 600 * SquareSize * 512))
(t ( error Unsupported graphics mode: * VMode *))
)
)
;;
;; Функція реалізує затримку на заданий час
;;
(
defun pause (time)
( let ((fintime (+ (* time internal-time-units-per-se cond )
( get-internal-run-time))))
( loop ( when (> ( get-internal-run-time) fintime)
(return-from pause) ))) p>)
;;
;; Функція цілочисельного ділення
;;
(
defun div (a b) ( round (/ a b))
)
;;
;; Функція малювання прямої:
;; Параметри: - напрямок малювання (0-7)
;; - довга прямий
;;
(
defun Line (Direction Size)
( setq x Px y Py)
(
case Direction
(0 ( setq x (+ x Size)))
(1 ( setq x (+ x Size) y ( - Y Size)))
(2 ( setq y (- y Size)))
(3 ( setq x (- x Size) y ( - Y Size)))
(4 ( setq x (- x Size)))
(5 ( setq x (- x Size) y ( + Y Size)))
(6 ( setq y (+ y Size)))
(7 ( setq x (+ x Size) y ( + Y Size)))
)
( move Px Py x y)
( setq Px x Py y)
)
;;
;; Функції A, B, C, D - рекурсивні функції малювання
;;
(
defun A (k)
( cond ((> k 0)
(A (- k 1)) (Line 1 h)
(B (- k 1)) (Line 0 (* 2 h))
(D (- k 1)) (Line 7 h)
(A (- k 1))
))
)
(
defun B (k)
( cond ((> k 0)