(defun c:snake ( / LM:rand LM:randrange c1 cl el ex gr p1 r1 r2 rl vs ) ;; Rand - Lee Mac ;; PRNG implementing a linear congruential generator with ;; parameters derived from the book 'Numerical Recipes' (defun LM:rand ( / a c m ) (setq m 4294967296.0 a 1664525.0 c 1013904223.0 $xn (rem (+ c (* a (cond ($xn) ((getvar 'date))))) m) ) (/ $xn m) ) ;; Random in Range - Lee Mac ;; Returns a pseudo-random integral number in a given range (inclusive) (defun LM:randrange ( a b ) (fix (+ a (* (LM:rand) (- b a -1)))) ) (if (setq p1 (getpoint "\nClick to generate the snake! ")) (progn (setq vs (getvar 'viewsize) r1 (/ vs (LM:randrange 30 80)) ) (repeat 20 (setq el (cons (cons -1 (entmakex (list '(0 . "CIRCLE") (cons 10 p1) (cons 40 r1) (cons 62 (logand (LM:randrange 2 255) (~ 1)))))) el) cl (cons p1 cl) rl (cons r1 rl) r2 (/ vs (LM:randrange 30 80)) p1 (cons (- (car p1) r1 r2) (cdr p1)) r1 r2 ) ) (setq el (reverse el) cl (reverse cl) rl (reverse rl) ) (while (= 5 (car (setq gr (grread t 13 0)))) (entupd (cdr (assoc -1 (entmod (subst (cons 10 (setq c1 (cadr gr))) (assoc 10 (setq ex (entget (cdar el)))) ex))))) (setq cl (cons c1 (mapcar '(lambda ( a b c d / ax ) (entupd (cdr (assoc -1 (entmod (subst (cons 10 (setq c1 (polar c1 (angle c1 c) (+ b d)))) (assoc 10 (setq ax (entget (cdr a)))) ax))))) c1 ) (cdr el) (cdr rl) (cdr cl) rl ) ) ) ) ) ) (princ) )