Ich dachte, ich würde eine einfache GUI-App mit dem Ansatz "Welt/Universum ohne Mutation" versuchen, aber versuchen, das Programm "Welt/Universum" selbst zu implementieren.Über die Welt/das Universum hinausgehen
Ich habe meine kleine Skizze unten, aber ich kam schnell zu dem Schluss, dass, während ich das Teachpack verwenden konnte, ich nicht weiß, wie ich die Teachpack-Funktionalität selbst erreichen kann.
Ich vermute, ich sollte Fortsetzungen verwenden, aber das scheint nicht der Ansatz in der Quelle universum.rkt zu sein.
Ich könnte immer nur das Programm in die Canvas-Klasse stopfen, (wie früher Spiele wie Slidey und dergleichen scheinen), aber ich möchte wirklich einen Griff bekommen, wie man den 'Welt/Universum'-Stil des Programms implementiert Steuerung.
;;;;----
#lang racket/gui
; simple drawing program
; mousedown starts recording a list of points
; mousechanged starts recording a new list
; paint callback paints the list of lists as lines.
(define diagramframe (new frame% [label "paint"] [width 300]
[height 300] [x 1000][y 300]))
;(define lines '(((0 . 0) (0 . 300) (250 . 250) (150 . 176))))
(define lines '(((0 . 0) (0 . 300) (250 . 250) (150 . 176))
((10 . 4) (280 . 10))))
(define paintcanvas%
(class canvas%
(init-field mouse-event-callback)
(super-new)
(define dc (send this get-dc))
(define/override (on-event mouse-event)
(mouse-event-callback mouse-event))))
(define (paint-cb c dc)
(for-each (λ (line) (send dc draw-lines line)) lines))
(define (me-cb mouse-event)
(let ((x (send mouse-event get-x))
(y (send mouse-event get-y)))
(when (and (send mouse-event get-left-down)
(send mouse-event moving?))
(if (send mouse-event button-changed?)
; if true append as new list
'()
; if false append existing list
'()))))
(define Paintcanvas (new paintcanvas%
[parent diagramframe]
[paint-callback paint-cb]
[mouse-event-callback me-cb]))
(define (main world)
(when world (main (??? world)))
(send diagramframe show #t))
(main lines)
(send diagramframe show #t)
;;-----
danke - große Antwort. – Stephen