Nochmal!
Oft soll ein bestimmter Programmabschnitt mehrmals durchlaufen werden. Ein Spiel bei dem nur ein einziges mal die Eingabe über den Controller abgefragt würde, wäre sicherlich nicht besonders interessant..
Um ein Programm zu schreiben, in dem ein bestimmter Abschnitt mehrmals durchlaufen wird, brauchst du im Normalfall sogenannte Schleifen.
In Python gibt zwei Arten von Schleifen: die „for“-Schleife und die „while“-Schleife. Die „for“-Schleife wird verwendet, um eine bestimmte Anzahl von Schritten durchzuführen, während die „while“-Schleife verwendet wird, um eine Aktion so lange auszuführen, wie eine bestimmte Bedingung erfüllt ist.
while
Die while-Schleife wird meist verwendet, wenn vor Ausführung nicht genau bekannt ist, wie viele Durchläufe es geben soll. Zu Beginn eines jedes Durchlaufs, auch des ersten, wird überprüft, ob eine Bedingung erfüllt ist. Ist dies der Fall, wird der Programmteil innerhalb der Schleife ausgeführt. Vor der nächsten Ausführung wird die Bedingung erneut geprüft. Ist sie erfüllt wird der Programmteil erneut ausgeführt und so weiter…
Beispiel
Angenommen, wir möchten eine Zahl erraten, die der Picoboy in einer Variablen abgelegt hat. Wir können eine „while“-Schleife verwenden, um die Schleife so lange auszuführen, bis wir die richtige Zahl erraten haben:
richtigeZahl = 7 # neue Variable "richtgeZahl" wird auf 7 gesetzt gerateneZahl = 0 # neue Variable "gerateneZahl" wird auf 0 gesetzt while gerateneZahl != richtigeZahl: # Der folgende (eingerückte) Codeabschnitt wirs ausgeführt, # solange "gerateneZahl" ungleich (!=) "richtigeZahl" ist. gerateneZahl = int(input("Rate eine Zahl zwischen 1 und 10: ")) # eine eingegebene Zahl wird eingelesen und in "gerateneZahl" # abgelegt. print("Richtig geraten!")
for
Die for-Schleife wird oft im Zusammenhang mit Listen verwendet. – Auf sie kommst du später noch einmal zurück.
Bis dahin musst du dich mit einer einfacheren Funktionalität der for-Schleife begnügen, die eine bestimmte Anzahl von Wiederholungen durchführt. Dabei steigt die sogenannte Schleifenvariable bei jeder Wiederholung im Normalfall um jeweils Eins.
Beispiel
from picoboy import PicoBoy pb = PicoBoy() # Den Teil oberhalb dieser Zeile nicht verändern pb.fill(0) pb.show() for i in range(0, 16): # Der Inhalt der Schleife wird 16 mal wiederholt. Die # Schleifenvariable i nimmt dabei die Werte von 0 bis 15 an. pb.line(0, 0 , i * 8, 63, 1) # Linie von (0,0) nach (i*8,63) in den Speicher zeichnen pb.delay(50) # 50 Millisekunden warten pb.show() # Grafik zum Display übertragen und anzeigen.
Schachteln
Wie du es schon von den Verzweigungen kennst, lassen sich auch Schleifen schachteln uns mit Verzweigungen kombinieren.
Beispiel
from picoboy import PicoBoy pb = PicoBoy() # Den Teil oberhalb dieser Zeile nicht verändern pb.fill(0) pb.show() for i in range(0, 8): # Der eingerückte Teil hinter dieser Schleife wird 8 mal ausgeführt. # Das gilt auch für die Schleife. # Dabei nimmt i die Werte von 0 bis 7 an. for j in range(0,16): # Der eingerückte Teil hinter dieser Schleife wird je 16 mal ausgeführt. # Dabei nimmt j die Werte von 0 bis 15 an. pb.pixel(j * 8, i *8 , 1) # Dieser Teil wird also 8 * 16 = 128 mal ausgeführt. # Bei den ersten 16 Durchläufen hat i den Wert 0, j nimmt nacheinander # wie Werte von 0 bis 15 an. # Anschließende hat i den Wert 1 und j nimmt wieder nacheinander die # Werte von 0 bis 15 an. pb.delay(20) pb.show()
Beispiel
from picoboy import PicoBoy import random pb = PicoBoy() xPos = 64 yPos = 32 spielLaeuft = 1 while True: if(pb.pressedUp() and yPos > 0): # Joystick nach oben gedrückt? yPos = yPos - 1 # Verringere Variable yPos um 1 if(pb.pressedDown() and yPos < 63): # Joystick nach unten gedrückt? yPos = yPos + 1 # Erhöhe Variable yPos um 1 if(pb.pressedLeft() and xPos > 0): # Joystick nach links gedrückt? xPos = xPos - 1 # Verringere Variable xPos um 1 if(pb.pressedRight() and xPos < 127): # Joystick nach rechts gedrückt? xPos = xPos + 1 # Erhöhe Variable xPos um 1 if(pb.pressedCenter()): # Joystick mittig gedrückt? pb.fill(0) # Bildspeicher leeren pb.pixel(xPos,yPos,1) # Pixel an Position (xPos,yPos) in den Bildspeicher zeichnen pb.show() # Bildspeicher anzeigen pb.delay(20) # 20 ms warten
Beispiel
Auch tiefere Verschachtelungen sind möglich:
from picoboy import PicoBoy pb = PicoBoy() # Den Teil oberhalb dieser Zeile nicht verändern pb.fill(0) pb.show() for i in range(0, 8): for j in range(0,16): if i*2 != j: pb.fill_rect(j * 8, i * 8, 7, 7 , 1) pb.show()
Hier geht es weiter.