Objetos_Bloques.lsp



;---------------------------------------------------------------------------------
;	D I S P L A Y
;---------------------------------------------------------------------------------
(setf Display (make-array '(40 40):initial-element '_))		; Espacio muestral



;---------------------------------------------------------------------------------
; Mostrar el contenido de la matriz de ceros y unos
;---------------------------------------------------------------------------------
(defun MuestraCuadricula () (print Display) )



;---------------------------------------------------------------------------------
;		SE CREAN LOS NUEVOS TIPOS DE DATO
;---------------------------------------------------------------------------------
;(defstruct triangulo
;	(x 28)
;	(y 6)	
;)

(defclass figura ()
	(
		(x :accessor posicion_x :initarg :x)
		(y :accessor posicion_y :initarg :y)
		(Libre :accessor estado-Libre :initarg :Libre)
		(EstaSobre :accessor estado-EstaSobre :initarg :EstaSobre)
		(EstaBajo :accessor estado-EstaBajo :initarg :EstaBajo)
	)
)

(defclass Triangulo (figura) () )
(defclass Cuadro (figura) () )



;---------------------------------------------------------------------------------
;		SE MANDA LLAMAR AL MODULO DE GRAFICACION
;		X=renglon		Y=columna
;---------------------------------------------------------------------------------
        ;(setf XTriangulo 28) (setf YTriangulo 6)
        ;(setf XCuadro 28) (setf YCuadro 15)


(defun ColocaFiguras ()
	(setf Fig_Triangulo (make-instance 'Triangulo :x 28 :y 06) )
	(setf Fig_Cuadro    (make-instance 'Cuadro    :x 28 :y 15) )

	(print Fig_Cuadro)
	;(Dibuja Fig_Cuadro)
	;(DibujaTriangulo XTriangulo YTriangulo)
	;(DibujaCuadro XCuadro YCuadro)
	;(MuestraCuadricula)
	(setf x 0)	; solo para inhibir el doble print display
)
;===================================================================================================
;===================================================================================================
;			A R E A      D E      D I B U J O
;===================================================================================================
;===================================================================================================
;___________________________________________________________________
; Dibuja el cuadro
;___________________________________________________________________
(defun Dibuja (X Y)
	(dotimes (k 6)
		(setf (aref Display X (+ Y k)) 1)		; Parte superior
		(setf (aref Display (+ X 5) (+ Y k)) 1)		; Parte inferior
	)
	(dotimes (k 5)
		(setf (aref Display (+ X k) Y) 1)		; Parte izquierda
		(setf (aref Display (+ X k) (+ Y 5)) 1)		; Parte derecha
	)
)

;___________________________________________________________________
; Dibuja el triAngulo
;___________________________________________________________________
(defun DibujaTriangulo (X Y)
	; DIAGONAL
	(setf renglon 0)
	(dotimes (k 5)
		(setf (aref Display (+ X renglon) (+ Y renglon)) 1)
		(setf renglon (+ renglon 1))
	)
	; VERTICAL
	(setf renglon 0)
	(dotimes (k 5)
		(setf (aref Display (+ X renglon) Y) 1)
		(setf renglon (+ renglon 1))
	)
	; BASE
	(dotimes (k 6)
		(setf (aref Display (+ X 5) (+ Y k)) 1)
	)
	(setf (aref Display 1 5) 7)
)


;___________________________________________________________________
; Se genera un valor mayor que 5 y menor que 34 para garantizar que
; la figura ( de longitud 6 ) siempre va a quedar bien definida
;___________________________________________________________________
(defun ObtenValor()
	(loop
		(setq X (random 39))
		(if (and (>= X 6) (<= X 33)) (return X))
	)
)