====== Christmas Art ====== **Ziel:** * Mit TigerJython & TurtleGraphics weihnachtliche Kunst erstellen. (*) * Dabei die Grundlagen der Programmierung auffrischen. (*) Falls man lieber mit richtigem Python arbeiten möchte, kann man deren [[https://docs.python.org/3/library/turtle.html|Turtle-Module]] verwenden. {{ :gf_informatik:snow.png?600 |}} ==== Theorie ==== [[gf_informatik:programmieren_i_sca|TurtleGraphics Dossier (1M)]] ++++Zusammenstellung wichtigste Befehle| from gturtle import * Options.setPlaygroundSize(800,600) # Fenstergroesse veraendern t = Turtle() # Turtle erstellen # Hintergrundfarbe setzen t.setFillColor("black") t.fill(0,0) # Farbe und Dicke des Stifts setzen t.setPenColor("white") t.setPenWidth(2) # Turtle verstecken, damit nicht warten muss t.hideTurtle() # Basic Move t.home() # in Mitte des Screens setzen, nach oben ausrichten t.setPos(200,50) # an Position mit x=200 und y=50 setzen t.forward(150) # vorwaerts laufen (Anzahl Pixel angeben) t.back(10) # rueckwaerts laufen t.left(45) # nach links drehen (Winkel angeben) t.right(45) # nach rechts drehen ++++ ==== Schneeflocke ==== 1. Wähle ein **Schneeflockenmuster** aus. Recherchiere im Internet, erfinde ein eigenes oder wähle eines der folgenden: {{ :gf_informatik:snowflakes.jpg?400 |}} Falls du keine Lust auf Schneeflocken hast, kannst du auch einen einfachen Tannenbaum oder ein anderes weihnachtliches Bild zeichnen.\\ \\ 1. **Zeichne** nun eine Schneeflocke ins Zentrum des Bildschirms. Tipps: 1. Beginne mit `t.home()`, damit Turtle richtig ausgerichtet ist. 1. Verwende **Schleifen** (while oder for) anstelle von Copy-Paste. 1. Verwende **Variablen** für Werte, die mehrfach benötigt werden. 1. Siehe **Theorie** oben.\\ \\ 1. Packe deinen Code vom letzten Punkt nun in eine **Funktion**. Dies erlaubt die, ganz viele Schneeflocken an verschiedenen Orten zu zeichnen: def schneeflocke(x,y): # soll eine Schneeflocke, startend am Punkt (x,y) zeichnen t.home() # damit Turtle gerade nach oben schaut t.setPos(x,y) # setze Turtle an gewuenschte Startposition ... # hier dein Code vom letzten Punkt 1. Nun kannst du ganz **viele Schneeflocken** zeichnen: schneeflocke(-200,-130) schneeflocke(0,0) schneeflocke(50,70) Alternativ kannst du auch mit `random` **Zufallspositionen** generieren: import random x = random.randint(-400,400) ... 1. **Optional:** 1. Gib den Schneeflocken **verschiedene Farben**. 1. Implementiere **verschiedene Formen**, z.B. mehrere verschiedene Schneeflocken. 1. *Anspruchsvoll:* Generiere die Positionen der Schneeflocken **zufällig** und stelle sicher, dass es **keine Überlappungen** gibt. ++++Code sca| from gturtle import * import random colors = ["white","red","green","blue"] WIDTH = 1200 HEIGHT = 800 Options.setPlaygroundSize(WIDTH,HEIGHT) t = Turtle() t.setFillColor("black") t.fill(0,0) t.setPenColor("white") t.setPenWidth(1) t.hideTurtle() ### dimensions scale = 0.5 d = int(50 * scale) d1 = int(15 * scale) ang1 = 45 d2 = int(20 * scale) d3 = int(15 * scale) ang3 = 55 def schneeflocke(x=0,y=0,color="white"): t.setPenColor(color) for i in range(6): t.home() t.setPos(x,y) t.left(60*i+30) t.forward(d) t.back(d1) t.left(ang1) t.forward(d1) t.back(d1) t.right(2*ang1) t.forward(d1) t.back(d1) t.left(ang1) t.back(d2) t.left(ang3) t.forward(d3) t.back(d3) t.right(2*ang3) t.forward(d3) t.back(d3) t.left(ang3) def get_nonoverlapping_positions(n=10,d_min=2,width=800,height=600): positions = [] for i in range(n): while True: x = random.randint(-width//2,width//2) y = random.randint(-height//2,height//2) # list empty if len(positions) == 0: positions.append((x,y)) break # check if point is far enough from other points too_close = False for (px,py) in positions: d = ((px-x)**2 + (py-y)**2)**0.5 if d < d_min: too_close = True break if not too_close: positions.append((x,y)) break return positions positions = get_nonoverlapping_positions(n=120,d_min=70,width=WIDTH,height=HEIGHT) for x,y in positions: schneeflocke(x,y,random.choice(colors)) #t.savePlayground("/Users/anschae/schneeflocken.png","png") ++++