cg-Cad

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
MOT01.LSP

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
MOT02.LSP

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
MOT03.LSP

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
MOT04.LSP

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 18 Luglio 2005