Konzept: Funktionen, Parameter und Rückgabewerte#
Bisher hast du Methoden wie on_setup
oder act
verwendet, die zu einer World
oder einem Actor
gehören. Jetzt lernst du, wie du eigene Funktionen erstellen kannst. Funktionen sind Unterprogramme, mit denen du Code wiederverwenden kannst, statt ihn zu wiederholen.
Erstes Beispiel#
Du möchtest vier rote Kreise erstellen, wie hier gezeigt:
import miniworlds
world = miniworlds.World(80, 80)
c1 = Circle((20, 20), 20)
c1.color = (255, 0, 0)
c2 = Circle((60, 20), 20)
c2.color = (255, 0, 0)
c3 = Circle((60, 60), 20)
c3.color = (255, 0, 0)
c4 = Circle((20, 60), 20)
c4.color = (255, 0, 0)
world.run()
Das funktioniert – aber wenn du alle vier grün machen möchtest, müsstest du vier Zeilen ändern. Stattdessen kannst du eine Funktion verwenden:
import miniworlds
world = World(80, 80)
def create_circle(x, y):
c = miniworlds.Circle((x, y), 20)
c.color = (255, 0, 0)
create_circle(20, 20)
create_circle(60, 20)
create_circle(60, 60)
create_circle(20, 60)
world.run()
Allgemein: Funktionen definieren#
Wenn du komplexe Aufgaben automatisieren willst – wie das Erstellen mehrerer Actors – definierst du eine Funktion:
def function_name(parameters):
code_block
Beispiel:
def create_circle(x, y):
c = Circle((x, y), 20)
c.color = (255, 0, 0)
Erklärung:
Funktionsname:
create_circle
Parameter:
x
,y
→ werden beim Funktionsaufruf übergebenFunktionskörper: wird von oben nach unten ausgeführt, wenn die Funktion aufgerufen wird
Funktionen aufrufen#
Um eine Funktion zu verwenden, schreibst du:
function_name(arguments)
Zum Beispiel:
create_actor(4, 2)
Komplexe Figuren zeichnen#
Mit Funktionen kannst du komplexe Figuren ganz einfach zeichnen:
import miniworlds
world = miniworlds.World(400, 220)
def create_face(x, y):
c = miniworlds.Circle((x, y), 40)
c.color = (255, 255, 0)
miniworlds.Circle((x + 15, y - 10), 10)
miniworlds.Circle((x - 15, y - 10), 10)
a = Arc((x, y + 20), 40, 20, 180, 360)
a.center = a.position
a.color = (255, 0, 0)
create_face(60, 60)
create_face(260, 60)
create_face(160, 160)
world.run()
Actors automatisch erstellen#
Dieses Beispiel zeigt, wie du mit Funktionen effizient mehrere Actors platzieren kannst:
import miniworlds
world = miniworlds.TiledWorld()
world.rows = 8
def create_actor(x, y):
t = Actor()
t.position = (x, y)
t.add_costume("images/player.png")
def create_wall(x, y):
t = Actor()
t.position = (x, y)
t.add_costume("images/wall.png")
create_actor(4, 2)
create_wall(4, 4)
create_wall(5, 4)
create_wall(6, 4)
create_wall(6, 3)
create_wall(6, 2)
create_wall(6, 1)
create_wall(5, 1)
create_wall(4, 1)
create_wall(3, 1)
world.run()
Verhalten in Funktionen registrieren#
Dieses Beispiel erstellt zufällige Regentropfen, bei denen das Verhalten (registriert mit @c.register
) innerhalb der Funktion definiert wird:
import miniworlds
import random
world = miniworlds.World()
world.add_background((80, 180, 255))
def raindrop(x, y):
c = miniworlds.Circle((x, y), random.randint(10, 20))
c.color = (0, 0, random.randint(100, 255), 100)
c.static = True
@c.register
def act(self):
self.move_down(random.randint(1, 3))
@c.register
def on_detecting_not_on_world(self):
self.remove()
@world.register
def act(self):
if world.frame % 5 == 0:
raindrop(random.randint(0, 400), 0)
world.run()
Rückgabewerte#
Bisher haben Funktionen einfach etwas getan. Mit einem Rückgabewert kannst du dir Informationen zurückgeben lassen.
Beispiel:
def is_even(x):
if x % 2 == 0:
return True
else:
return False
print(is_even(4)) # Output: True
Ein weiteres Beispiel: Färbe einen Kreis rot, wenn er auf der linken Hälfte des Bildschirms ist.
import miniworlds
import random
world = miniworlds.World(400, 50)
def is_left(obj):
if obj.x <= 200:
return True
else:
return False
for i in range(20):
x = random.randint(0, 400)
y = 25
c = miniworlds.Circle((x, y), 10)
if is_left(c):
c.color = (255, 0, 0)
world.run()