Gestaltungsorientierte Informatik

Dies ist eine alte Version des Dokuments!


Wenn du dir den Code deines bisherigen Programmes (oder des letzten Beispiels) anschaust, dann fällt dir sicher auf, dass viele Teile sehr änlich sind. Das ist ein klassischer Fall für Funktionen. In Funktionen kann man Codeteile zusammenfassen, die immer gleich sind. Bisher hast du das benutzt, um den Code für einzelne Orte in deinem Adventure zusammenzufassen. Es gibt aber weitere Möglichkeiten.

Naheliegend ist, den Code zum Anzeigen des Inventars in eine Funktion auszulagern. Dieser taucht an vielen Stellen in deinem Adventure auf. Wenn du daraus eine eigene Funktion machst, dann sparst du dir zum einen, den immer wieder gleichen Code zu tippen. Zum anderen kannst du später auch leicht die Ausgabe des Inventars an einer Stelle anpassen, falls du z.B. Nummern mit ausgeben möchtest, die Überschrift ändern etc. Das könnte so ausshen:

inventar = ["Fackel", "Seil", "Proviant", "Wasserflasche"]
 
def inventar_anzeigen()
    print("Inventar:")
    for ding in inventar:
        print(ding)

Dort, wo du diese Anweisungen bisher in deinem Code stehen hattest, kannst du nun „einfach“ die Funktion inventar_anzeigen() aufrufen:

wahl = input("Wohin soll es gehen? (n=Norden, o=Osten, i=Inventar) ")
if wahl == "i":
    inventar_anzeigen()

Baue jetzt eine solche Funktion in dein eigenes Adventure ein. Denke daran, überall dort den Funktionsaufruf einzubauen, wo du bisher das Inventar direkt ausgibst.


Wenn Code nur ähnlich ist, dann kann man die Parameter einer Funktion verwenden, um sie etwas flexibler zu gestalten. Ein gutes Beispiel dafür ist die Eingabe, die an jedem Ort ähnlich ist, sich aber auch unterscheidet, weil es durchaus unterschiedliche Auswahlmöglichleiten gibt. Dazu müssen wir das Programm etwas umbauen, wir schauen uns das wieder an einem Beispiel an.

eingabe20a.py
  1. inventar = ["Fackel", "Seil", "Proviant", "Wasserflasche"]
  2.  
  3. def inventar_anzeigen():
  4. print("Inventar:")
  5. for ding in inventar:
  6. print(ding)
  7.  
  8. def eingabe(text, moeglichkeiten):
  9. gute_antwort = False
  10. while not gute_antwort:
  11. wahl = input(text)
  12. if wahl in moeglichkeiten:
  13. gute_antwort = True
  14. return wahl
  15. else:
  16. gute_antwort = False
  17. print("Das ist hier leider nicht möglich.")
  18.  
  19. def waldlichtung():
  20. print("Waldlichtung")
  21. print("Du befindest dich auf einer kleinen Lichtung im Wald. Hohe Bäume umringen den Platz, ihr Blätterdach lässt nur vereinzelte Sonnenstrahlen hindurch. Ein schmaler Pfad führt nach Norden und ein anderer nach Osten. Der Boden ist weich, mit Moos bedeckt, und du meinst, in der Ferne das Plätschern von Wasser zu hören.")
  22. wahl = eingabe("Wohin soll es gehen? (n=Norden, o=Osten, i=Inventar) ", ["n","o","i"])
  23. if wahl == "i":
  24. inventar_anzeigen()
  25. waldlichtung()
  26. elif wahl == "n":
  27. flussufer()
  28. elif wahl == "o":
  29. verlasseneHuette()
  30.  
  31. def flussufer():
  32. print("Flussufer")
  33. print("Der Pfad mündet an ein glitzerndes Flussufer. Das Wasser ist klar und fließt ruhig dahin, doch weiter auf der anderen Seite siehst du dichten Wald. Ein alter Holzsteg ragt ein Stück in den Fluss – instabil, aber vielleicht noch nutzbar. Du kannst zurück nach Süden zur Waldlichtung gehen oder versuchen, den Holzsteg zu betreten.")
  34. wahl = eingabe("Wohin soll es gehen? (s=Süden, h=Holzsteg, i=Inventar) ", ["s", "h", "i"])
  35. if wahl == "i":
  36. inventar_anzeigen()
  37. flussufer()
  38. elif wahl == "s":
  39. waldlichtung()
  40. elif wahl == "h":
  41. holzsteg()
  42.  
  43. def holzsteg():
  44. print("Holzsteg")
  45. if "Rostiger Schlüssel" in inventar:
  46. print("Der Steg ächzt und wankt unter deinem Gewicht, aber er hält. Unter dir fließt das Wasser klar und ruhig dahin. Du kannst zurück zum Flussufer gehen.")
  47. wahl = eingabe("Was willst du tun? (f=zum Flussufer gehen, i=Inventar) ", ["f", "i"])
  48. if wahl == "i":
  49. inventar_anzeigen()
  50. holzsteg()
  51. elif wahl == "f":
  52. flussufer()
  53. else:
  54. print("Der Steg ächzt und wankt unter deinem Gewicht, aber er hält. Unter dir fließt das Wasser klar und ruhig dahin. Du beobachtest einige Fische und plötzlich siehst du einen rostigen Schlüssel auf Grund des Flusses liegen. Du kannst zurück zum Flussufer gehen oder versuchen, den Schlüssel zu nehmen.")
  55. wahl = eingabe("Was willst du tun? (f=zum Flussufer gehen, s=Schlüssel nehmen, i=Inventar) ", ["f", "s", "i"])
  56. if wahl == "i":
  57. inventar_anzeigen()
  58. holzsteg()
  59. elif wahl == "f":
  60. flussufer()
  61. elif wahl == "s":
  62. inventar.append("Rostiger Schlüssel")
  63. holzsteg()
  64.  
  65. def verlasseneHuette():
  66. print("Verlassene Hütte")
  67. print("Ein schmaler Weg führt dich zu einer kleinen, verwitterten Hütte. Die Fenster sind blind vor Staub, die Tür geschlossen. Drinnen scheint es dunkel, aber du meinst, einen schwachen Geruch von Rauch wahrzunehmen – vielleicht war hier kürzlich jemand. Du kannst zurück nach Westen, zur Waldlichtung, oder versuchen, die Tür zu öffnen.")
  68. wahl = eingabe("Was willst du tun? (w=nach Westen gehen, t=die Tür öffnen, i=Inventar) ", ["w", "t", "i"])
  69. if wahl == "i":
  70. inventar_anzeigen()
  71. verlasseneHuette()
  72. elif wahl == "w":
  73. waldlichtung()
  74. elif wahl == "t":
  75. if "Rostiger Schlüssel" in inventar:
  76. print("Die Tür ist verschlossen, aber der rostige Schlüssel passt und du kannst die Tür aufschließen. Die Hütte ist leer und kalt und du verlässt sie sofort wieder.")
  77. else:
  78. print("Die Tür ist verschlossen und du kannst sie nicht öffnen.")
  79. verlasseneHuette()
  80.  
  81. waldlichtung()
textadventure/eingabe20.1780045896.txt.gz · Zuletzt geändert: von celandir