5.1 Münzwurfspiel

Das Werfen einer Münze (Abbildung 1) soll programmiert werden.

Bild 115
Abbildung 1: Zahlseite und Kopfseite der Münze

Regeln des Münzwurfspiels

Der Spieler wählt, ob nach dem Werfen der Münze der Kopf oder die Zahl der Münze oben liegen soll.

Der Computer »wirft« die Münze, indem per Zufall Kopf oder Zahl als oben liegend ermittelt wird.

Anschließend wertet der Computer den Münzwurf aus:

  • liegt die vom Spieler gewählte Seite der Münze oben, gibt der Computer aus, dass der Spieler gewonnen hat
  • liegt die vom Spieler gewählte Seite der Münze unten, gibt der Computer aus, dass der Computer gewonnen hat

Der Spieler entscheidet, ob das Werfen der Münze wiederholt oder beendet wird.

Programm »muenzwurf.py«

Vom Programm »muenzwurf.py« ist die Callback-Funktion »werfen« gegeben, in der die Regeln des Münzwurfspiels als Algorithmus implementiert sind.

Quelltext der Callback-Funktion »werfen«
 import random

# Callback-Funktion
def werfen():
    seite=["Kopf", "Zahl"]
    spieler_wahl=entry1.get()
    # äußere if-Auswahl
    if spieler_wahl!="Kopf" and spieler_wahl!="Zahl":
        entry1.delete(0, tk.END)
        label2.config(text="Keine korrekte Eingabe!")
    else:
        computer_wurf=random.choice(seite)
        # innere if-Auswahl
        if spieler_wahl==computer_wurf:
            label2.config(text=\
                f"{computer_wurf} oben: Du gewinnst!")
        else:
            label2.config(text=\
                f"{computer_wurf} oben: Computer gewinnt!")
    entry1.delete(0, tk.END)

Erklärungen zum Quelltext
1. Zeile Das Modul »random« wird mit der Methode »choice« in das Programm eingebunden.
4. bis 20. Zeile Die Callback-Funktion »werfen« mit dem Algorithmus des Münzwurfspiels wird deklariert.
5. Zeile Der Variable »seite« wird die Liste »["Kopf", "Zahl"]« als Wert zugewiesen.
  • Die Zeichenketten (Strings) »"Kopf"« und »"Zahl"« sind die Elemente der Liste.
6. Zeile Die Eingabe des Spielers erfolgt über das Entry-Widget (Eingabefeld).
  • Der Variable »spieler_wahl« wird die eingegebene Zeichenkette als Wert zugewiesen.
8. bis 19. Zeile Die äußere if-else-Anweisung mitl zwei Bedingungszweigen wird ausgeführt:
  • Falls durch den Spieler keine Eingabe erfolgt oder ein falsches Wort eingegeben wird, führt der Computer den Münzwurf nicht aus.
    Der Spieler kann das Eingeben erneut versuchen.
  • Ist die Eingabe des Spielers korrekt, führt der Computer den Münzwurf und dessen Auswertung aus.
12. Zeile Die Methode »choice« ermittelt per Zufall in der Liste den Wert »Kopf« oder »Zahl«, der der Variable »computer_wurf« zugewiesen wird.
14. bis 19. Zeile Die innere if-else-Auswahl mit zwei Bedingungszweigen wird ausgeführt.
15., 16., 18., 19. Zeile Die jeweilige Auswertung des Spiels wird in f-Strings ausgegeben.
20. Zeile Das vom Spieler in das Entry-Widget (Eingabefeld) geschriebene Wort »Kopf« oder »Zahl« wird gelöscht, sodass erneut eine Eingabe des Spielers erfolgen kann.

In der Abbildung 2 ist eine mögliche grafische Benutzeroberfläche – das Hauptfenster mit den darauf platzierten Widgets – des Programms zu sehen.

Bild 116
Abbildung 2: Hauptfenster mit Widgets
Übung

Aufgabe A81

Implementiere das Programm »muenzwurf.py« am Computer.

Das Programm soll aus zwei Teilen bestehen:

  • der grafischen Benutzeroberfläche – dem Hauptfenster mit den darauf platzierten Widgets.
  • der Callback-Funktion »werfen« mit dem Algorithmus des Münzwurfspiels, dessen Kern eine äußere und eine innere if-else-Auswahl mit zwei Bedingungszweigen ist

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht:

  • gib mehrmals »Kopf« und »Zahl« ein
  • gib etwas Falsches ein