Diskuze: Common Lisp - derivace
Zobrazeno 2 zpráv z 2.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Zdravím, abych zbytečně nezakládal nové téma, dostal jsem za úkol
udělat jednočíselný displej (ten co je na kalkulačkách atd...), pro
čísla 0-9 v CS...
Ve škole používáme speciální grafickou knihovnu, kterou napsali členové
katedry..
Program už mám napsaný, ale nechce se mi to vykresli do okna, několikrát
jsem to kontroloval, odstranil chyby, ale i tak to nejde.. Vím, že to bude asi
taky pro vás řekněme neznámé, ale s radostí bych uvítal každý nápad,
jak to rozjet.. knihovna se přidá pomocí funkce load, kde se musí načíst
soubor init.lisp http://leteckaposta.cz/597262028
a můj výtvor:
(defclass display (picture)
((value :initform 0)))
(defun make-display (value)
(let ((display (make-instance 'display)))
(set-value display value)
display)
;;get
(defmethod value ((display display))
(slot-value display 'value))
;;aset
(defmethod set-value ((display display) value)
(labels
((border ()
(let ((border (make-instance 'polygon))
(A (make-point 0 0))
(B (make-point 0 250))
(C (make-point 350 250))
(D (make-point 250 0)))
((set-items border (list A B C D))
(set-color border :black))
border))
;zatim obdelniky
(polygons ()
(let* ((p1 (make-polygon 20 50 20 150 50 150 50 50)) ;horni
(p2 (make-polygon 50 50 50 80 150 80 150 50)) ;levej horni
(p3 (make-polygon 50 120 50 150 150 150 150 120)) ;pravej horni
(p4 (make-polygon 150 50 150 150 180 150 180 50)) ; střed
(p5 (make-polygon 180 50 180 80 280 80 280 50)) ;levej dolni
(p6 (make-polygon 180 120 180 150 280 150 280 120)) ;pravej dolní
(p7 (make-polygon 280 50 280 150 310 150 310 50));;dolni
(listPolygons 'nil))
(unless (and (> value 9) (< value 0))
(error "Hodnota policka musi byt 0 až 9"))
(cond ((= value 1) ((set-color p3 :red) (set-color p6 :red)))
((= value 2) ((set-color p1 :red) (set-color p3 :red) (set-color p4 :red) (set-color p5 :red) (set-color p7 :red)))
((= value 3) ((set-color p1 :red) (set-color p3 :red) (set-color p4 :red) (set-color p6 :red) (set-color p7 :red)))
((= value 4) ((set-color p2 :red) (set-color p4 :red) (set-color p6 :red)))
((= value 5) ((set-color p1 :red) (set-color p2 :red) (set-color p4 :red) (set-color p6 :red) (set-color p7 :red)))
((= value 6) ((set-color p2 :red) (set-color p4 :red) (set-color p5 :red) (set-color p6 :red) (set-color p7 :red)))
((= value 7) ((set-color p1 :red) (set-color p3 :red) (set-color p6 :red)))
((= value 8) ((set-color p1 :red) (set-color p2 :red) (set-color p3 :red) (set-color p4 :red) (set-color p5 :red) (set-color p6 :red) (set-color p7 :red)))
((= value 9) ((set-color p1 :red) (set-color p2 :red) (set-color p3 :red) (set-color p4 :red) (set-color p6 :red)))
((= value 0) ((set-color p1 :red) (set-color p2 :red) (set-color p3 :red) (set-color p5 :red) (set-color p6 :red) (set-color p7 :red))
(t (make-instance 'empty-shape))))
(setf listPolygons (list p1 p2 p3 p4 p5 p6 p7))
listPolygons)
(set-items display (list (polygons) (border)))
(setf (slot-value display 'value) value)
display))))
(defvar *win*)
(setf *win* (make-instance 'window))
(let ((p (make-instance 'picture))
(x (make-display 1))
((set-items p x)
(set-shape *win* p)
(redraw *win*))))
Zobrazeno 2 zpráv z 2.