link graphics, # Einbinden der graphics-Library turtle # Einbinden der turtle-Library global Breite, # Bildschirmbreite Hoehe, # Bildschirmhoehe canvas_list # Liste der Zeichenoberflaechen procedure rotate(deltaw) initial { WOpen( "canvas=hidden", # Verborgenes Fenster "pos=0,0", # Ursprung Links-Oben im Bildschrim "size=" || Breite || "," || Hoehe, # MAximale Groesse "label=Animiertes Rad") # Fenstertitel } TReset() # Turtle-Reset every i := 0 to 15 * Breite / 500 do # Zeichnet Reifen in Graustufen { f := 65536 * i * 500 / 16 / Breite Fg(f || "," || f || "," || f) TFCircle(Breite / 2 - i) } Fg("black") TFCircle(Breite / 2 - i) # schwarzer Kreis Fg("white") TFCircle(Breite / 2 - i - 2) # weißer Kreis every w := 0 to 360 by 45 do { WAttrib("linewidth=" || 8 * Breite / 500) # Beeite der Speichen Fg("blue") TGoto(Breite / 2,Hoehe / 2, w + deltaw) # Mittelpunkt des Rades TDraw(Breite / 4 - i * 5 /6) # zeichnet Speiche WAttrib("linewidth=" || 2 * Breite / 500) # Breite reflektierende Mitte der Speiche Fg("yellow") TGoto(Breite / 2, Hoehe / 2,w + deltaw) # Mittelpunkt des Rades TDraw(Breite / 4 - i + 2) # reflektierende Mitte der Speiche } THome() # Turtle: Ausgangsposition Fg("yellow") TFCircle(Breite / 10) # gelber Kreis um Radachse Fg("black") TFCircle(Breite / 20) # schwarzer Kreis als Radmitte delay(20) end procedure animate() every i := 1 to 45 do { CopyArea(canvas_list[i], &window) # kopiert Inhalt der verborgenen Zeichenoberflächen auf das sichtbare Fenster delay(20) } end procedure main() canvas_list := list(45) # Liste der Zeichenoberflaechen if WOpen("canvas=maximal") then # ermittelt die maximale Bildschirmgroesse { Breite := WAttrib("displaywidth") Hoehe := WAttrib("displayheight") #Breite := 600 #Hoehe := 600 WClose() } else stop(56) # Abbruch, falls das Fenster nicht geoeffnet werden kann every i := 0 to 44 do # Erzeugung des Rades in 45 Einzelbildern im Abstand von 1 ° { rotate(i) canvas_list[1 + i] := WOpen("size=" || Breite || "," || Hoehe,"pos=1,1","canvas=hidden") CopyArea(&window, canvas_list[1 + i]) # Kopieren der verborgenen Zeichenoberflaeche in die Liste der Zeichenoberflaechen } WAttrib("canvas=maximal") # Macht Fenster sichtbar WAttrib("pos=1,1") # Bringt Fenster in linke obere Ecke zeit := &clock counter := 0 repeat { animate() # Animation ablaufen bis #if &clock ~== zeit then #{ /neuzeit := &clock # counter +:= 1 # animate() # if neuzeit ~== &clock then stop(counter) #write(counter) #} if WQuit(&window) then break # eine Beendigungsereignis eintritt } every WClose(!canvas_list[0 to 45]) # Jedes Fenster der verborgenen Zeichenoberflaechen loeschen end