Funktionen eines Spiels zeitlich beschränken

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pythonist87
User
Beiträge: 3
Registriert: Mittwoch 22. September 2021, 10:58

Hallo zusammen,

ich möchte eine Funktion innerhalb eines Spiels zeitlich begrenzen.
Kurz, der Spieler soll ein Wort erraten und das innerhalb von 20 Sekunden. Sollte die Eingabe nach 20 Sekunden nicht geschehen oder falsch sein wird die Funktion erneut durchlaufen.
Leider funktioniert mein Code nicht so wie ich mir das vorstelle. kann mir jemand weiterhelfen?
Vielen Dank schonmal!:)

... anderer Code

import time

start_time = time.monotonic()
end_time = time.monotonic()

if answer == correct_word and "d" and end_time - start_time > 20:
print("Pünktlich")
else:
print("Zu spät")
find_the_word()
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

@pythonist87: das funktioniert nicht, weil `answer` und `currect_word` nicht definiert werden. `find_the_word` existiert auch nicht.
`start_time` und `end_time` sind fast identisch, jedenfalls wäre es sehr überraschend, wenn dazwischen 20 Sekunden liegen würden.

Bitte zeige den gesamten relevanten Code.

Das `and "d"` in der if-Bedingung ist überflüssig, das "d" immer zu wahr evaluiert wird.

Rekursion ist kein Ersatz für eine Schleife, wenn also die Funktion erneut durchlaufen werden soll, brauchst Du eine while-Schleife.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@pythonist87,

das was du hier zeigst, kann auch nicht funktionieren, denn "start_time" und "end_time" werden ja direkt nacheinander ermittelt. Der Zeitabstand dürfte nahe null sein.
Damit wird immer "Zu spät" ausgegeben.
Um das zu berichtigen muss man die "start_time" ermitteln bevor auf die Eingabe des Benutzers gewartet wird und die "end_time" muss ermittelt werden, nachdem der Benutzer eine Antwort gegeben hat.
Erst dann kann man die Fallunterscheidung "Pünktlich" oder "Zu spät" machen.
Wenn du es nicht hinbekommst, solltest du mal den gesamten Code zeigen. Dann kann man dir besser helfen.
pythonist87
User
Beiträge: 3
Registriert: Mittwoch 22. September 2021, 10:58

@ Sirius3


Der Code ist recht komplex und greift auch auf externe Dateien zu.
Der Einfachheit halber ein anderer Kontext. Ich hoffe das ist auch okay.

print("Wie viele Tage hat das Jahr?")
print("a) 14 b) 30 c) 1 d) 365")

answer = input(">")

def Tage_Jahr():

if answer == "365":
print("Richtig") # wenn diese Antwort innerhalb von 20 Sekunden geschehen ist geht es in die Funktion game_over(), ansonsten von vorn
else:
print("Falsch") # Funktion startet erneut
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@pythonist87: Das sieht falsch aus eine Funktion pro beantworteter Frage zu schreiben.

Die Beschreibung in welcher Reihenfolge die Funktionen aufgerufen werden lässt böses ahnen, zusammen mit der begründeten Vermutung von Sirius3, dass Rekursion als Schleifenersatz missbraucht wird. Funktionen sind nicht einfach Namen für ein Stück Code der mit dem Aufruf wie mit GOTO in BASIC oder ähnlichen Sprachen angesprungen wird. Eine Funktion wird aufgerufen, macht etwas, und kehrt dann zum Aufrufer zurück. Möglicherweise mit einem Rückgabewert. Funktionen rufen nicht endlos immer weiter Funktionen auf.

Funktionen bekommen alles was sie ausser Konstanten benötigen, als Argument(e) übergeben. `answer` wäre hier also ein Argument.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassennamen (PascalCase). Funktionsnamen werden üblicherweise nach der Tätigkeit benannt, die sie durchführen. `tage_jahr` ist keine Tätigkeit.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten