Zeitbegrenzung für Benutzer.

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
programmiTx
User
Beiträge: 6
Registriert: Mittwoch 18. September 2019, 15:19

Ich programmiere gerade ein Quiz mit tkinter. Jetzt möchte ich, dass der Spieler erst überlegt und dann eine Taste drücken, um die Antworten zu sehen. Das habe ich schon geschafft(also das mit der Taste), aber damit der Spieler nicht einfach nur drückt und dann mit den Antworten überlegt, möchte ich ihm nur kurz erlauben die Antworten zu lesen, um direkt zu antworten. Sollte er nicht rechtzeitig antworten soll er minus Punkte bekommen.
Mein Problem: Wie kann ich einen Timmer im Hintergrund laufen lassen und dann überprüfen ob der Spieler vor ablaufen oder erst zu spät geantwortet hat.
Im Modul tkinter kann ich den Timmer nicht mit dem Befehl time.sleep() machen, weil dann auch die Buttons von tkinter nicht reagieren, die die Antworten haben.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Such mal nach der Funktion .after() die jedes tk-Widget haben müsste. Damit kannst du eine Funktion nach einer bestimmte Zeit aufrufen lassen.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Du könntest time.monotonic() benutzen.

Code: Alles auswählen

import time

print("Wie viele Ecken hat ein Viereck?")
print("a) 1   b) 2   c) 50   d) 4")
start_time = time.monotonic()
antwort = input("> ")
end_time = time.monotonic()
if antwort == "d" and end_time - start_time < 10:
    print("Richtig")
elif antwort == "d" and end_time - start_time > 10:
    print("Richtig, aber zu langsam")
else:
    print("Falsch")
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Jankie: was hilft denn das? Das Programm steht dann doch immerhin ewig. Im Nachhinein kannst du den User dann bestrafen. Aber Ziel ist es doch das Spiel weitergehen zu lassen.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

@__deets__: für mich hat sich das so angehört als würde er genau das haben wollen, also erst im Nachhinein prüfen ob das Zeitlimit überschritten wurde.
programmiTx hat geschrieben: Freitag 24. Januar 2020, 15:40 Mein Problem: Wie kann ich einen Timmer im Hintergrund laufen lassen und dann überprüfen ob der Spieler vor ablaufen oder erst zu spät geantwortet hat.
Vielleicht hab ich die Frage einfach nicht richtig verstanden.
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jankie: Man kann die Frage so verstehen, aber das macht doch nicht wirklich Sinn, denn nach Ablauf der Zeit braucht man doch nicht mehr auf eine Antwort warten die sowieso nicht mehr ausgewertet werden muss.

Dein Code hat noch das Problem das eine Antwort die richtig war und nach genau 10 Sekunden beantwortet wurde mit der Ausgabe von "Falsch" quittiert wird. Der Test auf Richtigkeit sollte nicht mit dem Test auf Zeitüberschreitung vermischt werden, sondern im Fall das die Antwort richtig war, kann man entscheiden ob die richtige Antwort innerhalb der gegebenen Zeit war oder nicht.

Edit: Zudem war im Beitrag auch die Rede von `tkinter` womit diese Art des wartens sowieso hinfällig ist, weil das die GUI blockiert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

@__blackjack__: Für mich hat das ganze keinen Sinn ergeben. Wieso macht es Sinn den User die Antwortmöglichkeiten nur eine bestimmte Zeit anzuzeigen? Was wenn der Leser ein langsamer Leser ist und nicht alle Antwortmöglichkeiten in der Zeit lesen kann? Oder wenn es nur kurze Antwortmöglichkeiten sind reicht ja meistens ein kurzer Blick um sich all diese einzuprägen. Hab halt gedacht er meint sowas wie bei "Wer Wird Millionär?" beim Telefonjoker wo man ja auch nur eine bestimmte Zeit hat die Frage und die Antwortmöglichkeiten zu lesen und zu beantworten.
programmiTx
User
Beiträge: 6
Registriert: Mittwoch 18. September 2019, 15:19

Jankie hat geschrieben: Freitag 24. Januar 2020, 15:49 Du könntest time.monotonic() benutzen.
Danke für diese Methode ich habe sie zwar noch ein wenig abgeändert, aber so funktioniert es.
Benutzeravatar
noisefloor
User
Beiträge: 4192
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Jankie:
Für mich hat das ganze keinen Sinn ergeben. Wieso macht es Sinn den User die Antwortmöglichkeiten nur eine bestimmte Zeit anzuzeigen?
Der TE hat aber nicht nach _deiner_ Meinung zu seiner Aufgabenstellung gefragt, sondern nach einer Lösung zu seinem Problem... Es gibt hier öfters Aufgabenstellung (z.B. bei Uni-Aufgaben), die semi-sinnvoll sind. Trotzdem muss man die Lösen und geht nicht zu seinem Dozenten und sagt "die Aufgabe ist Müll, die beantworte ich nicht".

@ programmiTx:
Zeig' mal bitte den relevanten Code von dir. Wie weiter oben schon stand, besteht da durchaus die reele Chance, dass deine Lösung zwar funktioniert, aber suboptimal ist bzw. du damit später mal in Probleme rennst.

Gruß, noisefloor
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Uns wurde im ersten Semester noch beigebracht, kritische Fragen zu stellen. So unterschiedlich sind die Studiengänge und somit auch die Qualität der Fragen.

@programmiTx: oben schriebst Du noch, dass Du tkinter benutzen willst, da kannst Du aber mit time.monotonic nicht viel erreichen.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

@noisefloor: Da die Aufgabenstellung sehr ungenau für mich war hab ich mich halt gewundert. Und ein Forum ist ja da um sich gegenseitig auszutauschen und zu diskutieren, also auch um _meine_ Meinung dazu zu sagen. Der TE muss ja nicht jeden Post hier im Thread berücksichtigen wenn er für Ihn nicht relevant ist. Und wie du sagst, ohne relevanten Code können wir nur Ahnen was er vor hat und ich dachte halt dass Ihm diese Methode helfen könnte. Ob es aber tatsächlich das ist was er wollte oder die beste Möglichkeit ist weiß ich nicht, ich bin ja selber noch Anfänger. Aber trotzdem möchte ich meine Ideen dazu abgeben um auch selbst Rückmeldung zu meinen Vorschlägen zu bekommen um so selber noch etwas dabei zu lernen.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Eigentlich möchte der Threadstarter ja so etwas wie You Don't Know Jack ;) Was werden da Erinnerungen wach.
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

OMG ich bin gerade zwei Jahrzehnte in die Vergangenheit gereist. :-D
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten