Lisp »Tips 'n Tricks
»Gioco del labirinto
»1
»2
»3
»4
Variazioni sul tema del labirinto
MOT1
;|
MOT1.LSP (18 Luglio 2005)
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
|;
(defun vArray ( ii jj valore / i j e rigo X )
(setq i 0)
(while (<= i NR)
(setq j 0)
(while (<= j NC)
(setq e (nth j (nth i A)))
(if (and (= j jj)(= i ii))
(setq rigo (append rigo (list valore)))
(setq rigo (append rigo (list e)))
)
(setq j (1+ j))
)
(setq X (append X (list rigo)))
(setq rigo nil)
(setq i (1+ i))
)
(setq X X)
)
;|
Estrae un numero intero casuale da 0 a x-1
Il seme e' inizializzato con la variabile DATE
in questo modo la serie di numeri casuali
e' diversa in ogni sessione di gioco.
|;
(defun random ( x / m b c)
(if (not sd) (setq sd (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq sd (rem (+ (* b sd) c) m))
(fix (* (/ sd m) x))
)
(defun c:mot1 ( / snapp
NR NC A L pStart
x y xx yy
rn i j k
)
(setvar "cmdecho" 0)
(setq snapp (getvar "osmode"))
(command "_osnap" "_non")
(initget (+ 2 4))
(setq NR (getint "\nLarghezza del motivo <20>: "))
(if (= NR nil)(setq NR 20))
(initget (+ 2 4))
(setq NC (getint "\nAltezza del motivo <20>: "))
(if (= NC nil)(setq NC 20))
(setq pStart (getpoint "\nSeleziona un punto nel disegno..."))
(setq i 0)
(while (<= i NR)
(setq j 0)
(while (<= j NC)
(setq L (append L (list 0)))
(setq j (1+ j))
)
(setq A (append A (list L)))
(setq L nil)
(setq i (1+ i))
)
(setq i 0)
(while (<= i NR)
(setq A (vArray i 0 1))
(setq A (vArray i (1- NC) 1))
(setq i (1+ i))
)
(setq i 0)
(while (<= i NC)
(setq A (vArray 0 i 1))
(setq A (vArray (1- NR) i 1))
(setq i (1+ i))
)
(setq k 0)
(while (< k (* NR NC))
(while
(progn
(setq x (random NR))
(setq y (random NC))
(if (= (nth y (nth x A)) 1) nil T)
)
)
(setq xx x yy y)
(setq rn (random 4))
(cond
((= rn 0)(setq y (1- y)))
((= rn 1)(setq x (1- x)))
((= rn 2)(setq y (1+ y)))
((= rn 3)(setq x (1+ x)))
)
(command "_line"
(list (+ xx (car pStart))(+ yy (cadr pStart)) 0)
(list (+ x (car pStart))(+ y (cadr pStart)) 0)
""
)
(setq k (1+ k))
(setq xx x yy y)
)
(setvar "osmode" snapp)
(command "_redraw")
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
MOT2
;|
MOT2.LSP (18 Luglio 2005)
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
|;
;|
Estrae un numero intero casuale da 0 a x-1
Il seme e' inizializzato con la variabile DATE
in questo modo la serie di numeri casuali
e' diversa in ogni sessione di gioco.
|;
(defun random ( x / m b c)
(if (not sd) (setq sd (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq sd (rem (+ (* b sd) c) m))
(fix (* (/ sd m) x))
)
(defun c:mot2 ( / snapp
NR NC pStart
x y xx yy
rn i
)
(setvar "cmdecho" 0)
(setq snapp (getvar "osmode"))
(command "_osnap" "_non")
(initget (+ 2 4))
(setq NR (getint "\nLarghezza del motivo <20>: "))
(if (= NR nil)(setq NR 20))
(initget (+ 2 4))
(setq NC (getint "\nAltezza del motivo <20>: "))
(if (= NC nil)(setq NC 20))
(setq pStart (getpoint "\nSeleziona un punto nel disegno..."))
(setq i 0)
(while (< i (* NR NC))
(setq x (random NR))
(setq y (random NC))
(setq xx x yy y)
(setq rn (random 4))
(cond
((= rn 0)(setq y (1- y)))
((= rn 1)(setq x (1- x)))
((= rn 2)(setq y (1+ y)))
((= rn 3)(setq x (1+ x)))
)
(command "_line"
(list (+ xx (car pStart))(+ yy (cadr pStart)) 0)
(list (+ x (car pStart))(+ y (cadr pStart)) 0)
""
)
(setq i (1+ i))
(setq xx x yy y)
)
(setvar "osmode" snapp)
(command "_redraw")
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
MOT3
;|
MOT3.LSP (18 Luglio 2005)
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
|;
;|
Estrae un numero intero casuale da 0 a x-1
Il seme e' inizializzato con la variabile DATE
in questo modo la serie di numeri casuali
e' diversa in ogni sessione di gioco.
|;
(defun random ( x / m b c)
(if (not sd) (setq sd (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq sd (rem (+ (* b sd) c) m))
(fix (* (/ sd m) x))
)
;|
Estrae un numero casuale da 0 a x-1
|;
(defun rnd ( x / m b c)
(if (not sd) (setq sd (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq sd (rem (+ (* b sd) c) m))
(* (/ sd m) x)
)
(defun c:mot3 ( / snapp
NR NC pStart
x y xx yy
rn i
)
(setvar "cmdecho" 0)
(setq snapp (getvar "osmode"))
(command "_osnap" "_non")
(initget (+ 2 4))
(setq NR (getint "\nLarghezza del motivo <20>: "))
(if (= NR nil)(setq NR 20))
(initget (+ 2 4))
(setq NC (getint "\nAltezza del motivo <20>: "))
(if (= NC nil)(setq NC 20))
(setq pStart (getpoint "\nSeleziona un punto nel disegno..."))
(setq i 0)
(while (< i (* NR NC))
(setq x (random NR))
(setq y (random NC))
(setq xx x yy y)
(setq rn (random 4))
(cond
((= rn 0)(setq y (- y (rnd 2))))
((= rn 1)(setq x (- x (rnd 2))))
((= rn 2)(setq y (+ y (rnd 2))))
((= rn 3)(setq x (+ x (rnd 2))))
)
(command "_line"
(list (+ xx (car pStart))(+ yy (cadr pStart)) 0)
(list (- (+ x (car pStart)) 0.1)(- (+ y (cadr pStart)) 0.1) 0)
""
)
(setq i (1+ i))
(setq xx x yy y)
)
(setvar "osmode" snapp)
(command "_redraw")
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
MOT4
;|
MOT4.LSP (18 Luglio 2005)
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
|;
;|
Estrae un numero intero casuale da 0 a x-1
Il seme e' inizializzato con la variabile DATE
in questo modo la serie di numeri casuali
e' diversa in ogni sessione di gioco.
|;
(defun random ( x / m b c)
(if (not sd) (setq sd (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq sd (rem (+ (* b sd) c) m))
(fix (* (/ sd m) x))
)
;|
Estrae un numero casuale da 0 a x-1
|;
(defun rnd ( x / m b c)
(if (not sd) (setq sd (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq sd (rem (+ (* b sd) c) m))
(* (/ sd m) x)
)
(defun c:mot4 ( / snapp
NR NC pStart
x y xx yy
rn i
)
(setvar "cmdecho" 0)
(setq snapp (getvar "osmode"))
(command "_osnap" "_non")
(initget (+ 2 4))
(setq NR (getint "\nLarghezza del motivo <20>: "))
(if (= NR nil)(setq NR 20))
(initget (+ 2 4))
(setq NC (getint "\nAltezza del motivo <20>: "))
(if (= NC nil)(setq NC 20))
(setq pStart (getpoint "\nSeleziona un punto nel disegno..."))
(setq i 0)
(while (< i (* NR NC))
(setq x (random NR))
(setq y (random NC))
(setq xx x yy y)
(setq rn (random 4))
(cond
((= rn 0)(setq y (- y (rnd (rnd 4)))))
((= rn 1)(setq x (- x (rnd (rnd 4)))))
((= rn 2)(setq y (+ y (rnd (rnd 4)))))
((= rn 3)(setq x (+ x (rnd (rnd 4)))))
)
(command "_line"
(list (+ xx (car pStart))(+ yy (cadr pStart)) 0)
(list (- (+ x (car pStart)) 0.1)(- (+ y (cadr pStart)) 0.1) 0)
""
)
(setq i (1+ i))
(setq xx x yy y)
)
(setvar "osmode" snapp)
(command "_redraw")
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 18 Luglio 2005
|