Impressum
< Teil 1 Inhalt Teil 3 >

Laufendes O in Python - Teil 2

Im ersten Teil haben wir mit Hilfe von dieser Bibliothek ein O über den Bildschirm bewegt.
Zur Steuerung haben wir die Tasten WASD verwendet.

Das Problem bisher war, dass man über den Rand laufen kann und dann komische Sachen passieren. In diesem Teil werden wir dieses Problem beheben.
Der bisherige Python-Code:
from WConio2 import *
x=5
y=5
while True:
    gotoxy(x,y)
    print("O")
    c = getkey()
    gotoxy(x,y)
    print(" ")
    if c=='d': x=x+1
    if c=='a': x=x-1
    if c=='s': y=y+1
    if c=='w': y=y-1
    if c=='x': break

Bewegungsfreiheit einschränken

Wenn bisher ein A gedrückt wurde haben wir x um 1 vermindert.
Jetzt werden wir x nur vermindern, solange es größer als 5 ist.
Damit wird 5 zum kleinsten x-Wert und somit zum linken Rand des Spielfelds.

Damit auch rechts ein Rand entsteht, darf x nicht beliebig groß werden. Indem wir bei einem Tastendruck auf D x nur erhöhen, wenn es kleiner 15 ist, wird x maximal 15.
Für y müssen wir das gleiche bei den Tastendrücken auf S und W machen.

Möglichkeit 1

Eine mögliche Realisierung ist, wenn man in das if das die Taste überprüft, ein zweites if einfügt. Dieses zweite if überprüft den Wert x-Koordinate.
Für die Einschränkung nach links schaut das erste if ob A gedrückt wurde, das zweite if schaut ob x>5 ist und nur wenn beides gilt wird x um eins vermindert.

Um nach rechts zu beschränke geht man ähnlich vor, nur dass das if überprüfen muss ob x<15 ist.
Beschränkung nach links:
if c=='a':
  if x>5:
    x=x-1
Beschränkung nach rechts:
if c=='d':
  if x<15:
    x=x+1

Möglichkeit 2

Um nach links zu gehen müssen zwei Sachen gelten:
  1. die Taste muss 'a' sein (also c=='a')
  2. x muss größer als 5 sein (also x>5)
Diese beiden Bedingugen kann man in ein if packen, wenn man sie mit einem and verknüpft.
Beschränkung nach links:
if c=='a' and x>5:
    x=x-1
Beschränkung nach rechts:
if c=='d' and x<15:
    x=x+1
Da in Python die Anweisung direkt hinter dem if stehen kann, wenn es nur eine Anweisung ist, kann man es weiter verkürzen auf:
if c=='a' and x>5: x=x-1
if c=='d' and x<15: x=x+1

Der Code

Der komplette Code mit Variante 1:

Der komplette Code mit Variante 2: