irc quiz zum xten

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
JonnyDamnnox
User
Beiträge: 68
Registriert: Sonntag 10. März 2013, 21:14

Hallo :lol:
Also ich hab mich dazu entschieden den bot zu einem quizbot umzuwandeln.
http://www.python-forum.de/pastebin.php?mode=view&s=338

Könnte mir jemand sagen wie ich es schaffe das er auf die Antworten von den benutzern mit zb "richtig" in der richtigen Reihenfolge antwortet? Also nicht das jemand ein Wort sagt, und dann "richtig" erscheint obwohl es zu einer späteren Frage kommt. Auch sollen die Benutzer einen Punktestand haben. Ich hab schon einiges versucht, die Fragen und Antworten will ich später am liebsten selbst importieren können. Wie könnte ich den code noch optimieren??


Gruß
JonnyDamnnox
User
Beiträge: 68
Registriert: Sonntag 10. März 2013, 21:14

Vielleicht erkläre ich es auch zu blöd. Also noch mal mit Salami-Taktik:

Das ist der code:

http://www.python-forum.de/pastebin.php ... &mode=view

Also, "er" kann in einen channel und "hi" sagen. Dabei läuft erst mal die haupt_schleife() die ganze Zeit durch. D.h. wenn ich "quiz.start" eingeben, läuft ganz normal Zeile 32 ab(Es spielen mit ect...). Bis zur Zeile 37, dann wird Funktion fragen(self, antwort) ausgeführt. Mein Problem ist das ich es nicht hinbekomme das er auf eine erneute Eingabe reagiert. Also bei Zeile 37 und Funktion bei 51 happert es. Ich will das er sozusagen in dem elif-Block(ab Zeile 32) bleibt, und dann noch die Funktion bei 51 ausführt, aber so das ich danach noch z.b. "blau" eingeben kann. Also das was bei if user_input == ":blau": ect. steht auch ausführt. Leider kommt da einfach nix.
Ich hoffe das hat jetzt geholfen, schwer zu erklären :K

(falls den code jemand starten will, am Anfang muss man in der commandozeile noch zwei Namen eingeben, die tauchen dann bei mitspieler1 und mitspieler2 auf)

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

@JonnyDamnnox: warum stecken Deine ganzen Funktionen in einer Klasse und Du benutzt trotzdem ausschließlich globale Variablen? Gib Deiner Klasse eine __init__-Methode und als Attribut „sock“. TCP ist ein Stream-Protokoll, die recv-Methode garantiert also nicht, dass immer genau eine Zeile gelesen wird (es kann eine halbe oder zweieinhalb sein). Du mußt also selbst dafür sorgen, dass der Stream in Zeilen aufgeteilt wird. Dafür wäre ein Generator ganz nett, der auch nebenbei den PING-PONG erledigt und nur tatsächliche Nachrichten weitergibt. Dann solltest Du natürlich den Aktuellen Stand des Gesprächs irgendwo festhalten um zu wissen welche Frage welche Antwort erwartet.
In der Art:

Code: Alles auswählen

state='waiting'
for antwort in self.read_lines():
    if antwort==':quiz.start':
        if state!='waiting':
            self.answer('Spiel läuft schon!')
        else:
            state='started'
            self.answer('Welche Farbe hat mein Badezimmer?')
    elif state=='started' and antwort=='blau':
            self.answer('Richtig!')
#usw.
Antworten