Hallo,
ich habe eine Art Brettspielin Python mit Hilfe von Pygame geschrieben und habe folgendes Problem:
Die KI der Bots wird in einem Thread berechnet. Wenn nun nur noch Computergesteuerte Spieler da sind, stockt die Hintergrundmusik, die mit Hilfe des pygame.mixer.music Moduls ausgegeben wird. Was kann ich dagegen tun?
Probleme bei Threads, Priorität zu hoch?!
Des Weiteren habe ich das Problem, dass die Netzwerkthreads zu viel Zeit in Anspruch nehmen.. Das Spiel beim Host ruckelt daher...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Naja, musst du alles in echten Threads haben? Vielleicht kannst du auch lightweight Threads wie Greenlets oder so verwenden.. das ist nur mal so 'ne Idee.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ob Code in Threads viel Rechenzeit verbraucht oder in Greenlets, macht eigentlich keinen Unterschied.
Solange es kein Echzeit-Spiel ist, frage ich mich auch nach dem Sinn von Threads? Kann ein Gegner denn schon seinen nächsten Zug planen, bevor der des aktuellen Spielers getätigt wurde?
Solange es kein Echzeit-Spiel ist, frage ich mich auch nach dem Sinn von Threads? Kann ein Gegner denn schon seinen nächsten Zug planen, bevor der des aktuellen Spielers getätigt wurde?
Es ist relativ Schwierig die KI in einzelne Schritte zu zerlegen. Das würde also bedeuten, dass das Spiel bei einem Zug des Gegners warten muss bis dieser fertig ist und sozusagen "hängt". Daher dachte ich die KI in einen eigenen Thread zu packen, so dass das eigentliche Spiel wähhrend der KI-Berechnung einfach weiterläuft.
Bei dem Netzwerkthreads ist es ja sogar eigentlich unumgänglich Threads zu benutzen.
Bei dem Netzwerkthreads ist es ja sogar eigentlich unumgänglich Threads zu benutzen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, nicht unbedingt. So kannst du mit asyncore ohne Threads arbeiten.DasPinsch hat geschrieben:Bei dem Netzwerkthreads ist es ja sogar eigentlich unumgänglich Threads zu benutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ok.
Allerdings habe ich es nun bereits in Threads gemacht und werde es wohl auch nicht mehr umschreiben... Gibt es da keine Möglichkeiten? Kann doch nicht sein, dass das mit Python nich ginge...
Allerdings habe ich es nun bereits in Threads gemacht und werde es wohl auch nicht mehr umschreiben... Gibt es da keine Möglichkeiten? Kann doch nicht sein, dass das mit Python nich ginge...
Also kann eine KI schon ihren nächsten Zug planen ohne alle anderen Züge zu kennen?DasPinsch hat geschrieben:Es ist relativ Schwierig die KI in einzelne Schritte zu zerlegen. Das würde also bedeuten, dass das Spiel bei einem Zug des Gegners warten muss bis dieser fertig ist und sozusagen "hängt". Daher dachte ich die KI in einen eigenen Thread zu packen, so dass das eigentliche Spiel wähhrend der KI-Berechnung einfach weiterläuft.
Bei dem Netzwerkthreads ist es ja sogar eigentlich unumgänglich Threads zu benutzen.
Wie sieht's aus, wenn Du den KI's an ein paar Stellen eine kleine Ruhepause per `pygame.time.delay()` verpasst. Vielleicht liegt das Problem auch einfach nur daran, das der "Bildschirm" viel häufiger neu gezeichnet werden muss wenn nur noch die KI's spielen, weil die ja ohne Unterbrechung neue Züge produzieren.