PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Scheme] Brauche Hilfe bei Aufgabe


radi
2005-11-16, 18:19:31
Wir sollen eine Liste mit Objekten (Name: FACE) erstellen die Objekte zur Zeichnung eines Smileys enthalten. ich bin total ratlos wie ich das machen soll :( Helft mir!

Hier nochmal die genaue aufgabenstellung:

http://2adi.cybton.com/images/aufgabe.jpg

Das hab ich bisher zusammengeschrieben:


(define-struct circle (position radius color))
(define-struct rectangle (position width height color))

(define pos-circ (make-posn 50 50))
(define pos-rec1 (make-posn 30 20))
(define pos-rec2 (make-posn 65 20))
(define pos-rec3 (make-posn 40 75))
(define pos-rec4 (make-posn 40 35))


(define circ1 (make-circle pos-circ 40 'red))
(define rec1 (make-rectangle pos-rec1 5 5 'blue))
(define rec2 (make-rectangle pos-rec2 5 5 'blue))
(define rec3 (make-rectangle pos-rec3 20 10 'red))
(define rec4 (make-rectangle pos-rec4 10 30 'blue))


(define FACE (list circ1 rec1 rec2 rec3 rec4))


(define (DrawShapes FACE)
(cond
[(empty? FACE) false]

[ draw-circle (circle-position circ1) (circle-radius circ1) (circle-color circ1)]
))

(start 500 500)

(DrawShapes FACE)

Bei dem cond unten bin ich dann ausgestiegen weil ich nicht wusste wie ich es einbauen soll dass wenn die objekte drin in der liste sind er dann die malt. ka ich raffs net. die scripte sind auch fürn arsch :( wahrscheinlich is des eh kompletter schwachfug aber ich kanns nich besser ;(

Helft mir! :usad:

Freu mich auf eure Tipps! :ucoffee:


Liebe Grüße,

radi

Trap
2005-11-16, 19:42:00
Ich glaub das hilft dir weiter:
(circle? circ1)
(circle? rec1)
(rectangle? circ1)
(rectangle? rec1)

radi
2005-11-16, 19:55:45
Ich glaub das hilft dir weiter:
(circle? rec1)

?

Trap
2005-11-16, 20:55:59
?
Hast du mal ausprobiert was das ergibt? Das braucht man für den Bedingungsteil von cond...

HellHorse
2005-11-18, 20:44:15
Ok, folgende Idee:
DrawShapes kriegt eine liste von Objekten, zeichnet jedes einzele und gibt dann true zurück.
Das jeweils erste Element angeschaut, dann gezeichnet und schlussendlich per Rekursion das Geliche auf den folgenden gemacht.
z.B.
Falls das Objekt ein Kreis ist, wird der mit mittels draw-solid-disc (oder draw-circle) gezeichnet.

Das kann dann z.B. so aussehen (ungetestet natürlich).
(define (DrawShapes shapes)
(cond
((empty? shapes) true)
((circle? (car shapes)
(begin
(draw-solid-disc ....)
(DrawShapes (cdr shapes))))
((rectangle? (car shapes)
(begin
(draw-solid-rect ....)
(DrawShapes (cdr shapes))))))

Das ist recht hässlich und sollte man besser mit einem dynamischen Dispatch auf das Objekt machen aber was solls.