Seite 1 von 1
Reaktionsspiel TikoTako
Verfasst: Donnerstag 6. November 2025, 13:03
von Herkule
Hallo zusammen!
Ich bin ein Anfänger, der sich an einem kleinen Spiel ausprobieren möchte. Bisher, habe ich nur die Idee vom Ablauf, den ich grob beschreiben möchte. Wenn möglich, möchte ich ohne Pygame auskommen, da es nur ein sehr einfaches Spiel werden soll.
Ein Anfangsbildschirm, soll das Spiel erklären, und zum Starten auffordern.
Dann kommt der Spielablauf, in dem Buchstaben und Ziffern gezeigt werden, auf die der Spieler reagieren muss. Nach 4 Ziffern, ist das Spiel bereits beendet, und die Auswertung wird angezeigt.
Die Ziffern, sollen einen Timer starten, der vom Spieler gestoppt werden soll. Nach 850ms, soll es als Fehler registriert werden.
Das Schwierigste, ist der Programmlauf wärend des Spiels, da es einigermaßen zufällig Buchstaben zwischen die Ziffern einblenden soll, damit es nicht zu simpel aussieht.
gerade Ziffer , timer1
Buchstabe
Ungerade Ziffer , timer2
Buchstabe
gerade Ziffer , timer3
Buchstabe
ungerade Ziffer ,timer4
--> Ende
t1 + t2 + t3 + t4 = Gesamtzeit
Kommentare, Tipps und Anmerkungen, sind willkommen. Später, werde ich hier auch code präsentieren.
Re: Reaktionsspiel TikoTako
Verfasst: Donnerstag 6. November 2025, 15:26
von __blackjack__
@Herkule: Ich würde sagen das ist für Anfänger nicht einfach, weil hier mit den Timern schon Nebenläufigkeit entsteht und man die möglichen Zustände im Blick behalten muss. Es braucht eine Möglichkeit eine Eingabe vom Benutzer zu erfragen, die aber durch eine Zeitüberschreitung auch abgebrochen werden können muss. Wenn man bei der Standardbibliothek bleiben möchte, dann ist ein Konsolenprogramm schon mal raus wenn es auch auf Windows laufen soll und man müsste eine GUI-Anwendung mit `tkinter` schreiben. Also objektorientierte Programmierung (OOP) + die ereignisorientierte Programmierung, die durch GUIs normalerweise dazu kommt.
Ansonsten bräuchte man für ein Konsolenprogramm beispielsweise `blessed` als externe Abhängigkeit. Dann kann man bei ”linearer” Programmierung bleiben, was für einen Anfänger erst einmal einfacher ist.
Eine präzise Idee/Beschreibung von dem was man umsetzen möchte ist wichtig. Aus dem ersten Beitrag wird nicht wirklich genau klar wie der Programmablauf sein soll. Du musst das am Ende ja einem dummen Rechner haarklein als Programmcode erklären, damit der das richtige macht.
Re: Reaktionsspiel TikoTako
Verfasst: Donnerstag 6. November 2025, 17:27
von Herkule
@__blackjack__ Danke, für die schnelle Antwort! Ich glaube, das meiste verstanden zu haben. Das Spiel für die Konsole zu programmieren, ist eher eine Notlösung, um den Ablauf auf die Reihe zu bekommen. Grafik, wäre schon wichtig, später.
Das Programm, soll schon linear ablaufen. Die Timer, laufen nacheinander. So hatte ich es zumindest gedacht.
Der Timer, soll mit dem Zeigen der Ziffer bei 0 ms starten, und wird durch Tastendruck gestoppt, oder läuft bis 850ms, und löst dann einen Fehler aus. Die Zeit, in ms wird in Variablen gespeichert, und später addiert.
Kommt Zeit, kommt Spiel.

Re: Reaktionsspiel TikoTako
Verfasst: Donnerstag 6. November 2025, 18:22
von Dennis89
Naja, der Timer muss laufen und im Gleichen muss dein Programm auf die Benutzereingabe reagieren können. Sonst würde der Timer immer bis 850ms laufen und danach wird dann erst die Benutzereingabe verarbeitet.
Grüße
Dennis
Re: Reaktionsspiel TikoTako
Verfasst: Donnerstag 6. November 2025, 18:29
von Herkule
Dennis89 hat geschrieben: Donnerstag 6. November 2025, 18:22
... Sonst würde der Timer immer bis 850ms laufen und danach wird dann erst die Benutzereingabe verarbeitet.
Grüße
Dennis
Danke, für die Antwort! Es ist wohl komplizierter, als ich dachte.

Na egal. Ich werde mich schon durchbeißen.

Re: Reaktionsspiel TikoTako
Verfasst: Donnerstag 6. November 2025, 18:43
von Sirius3
@Herkule: ein besserer Einstieg wäre ein Spiel ohne Zeitlimit. Tictactoe, Galgenmänchen, Mastermind, etc.
Re: Reaktionsspiel TikoTako
Verfasst: Donnerstag 6. November 2025, 19:42
von nezzcarth
Herkule hat geschrieben: Donnerstag 6. November 2025, 18:29
Danke, für die Antwort! Es ist wohl komplizierter, als ich dachte.

Na egal. Ich werde mich schon durchbeißen.
Was du beschreibst wird so ähnlich z.B. in psychologischen oder neurowissenschaftlichen Computer-Experimenten gemacht. Dafür gibt es spezialisierte Software, die entsprechende Echtzeitanforderungen erfüllt und in der man solche Szenarien wie in deinem Spiel mit einer DSL definieren kann. Das nur mal zu Illustration; für ein simples Spiel muss es vmtl. nicht 100% genau sein, aber es ist halt auch nicht komplett trivial. Vielleicht zum Einstieg erst mal mit was anderem anfangen? Es gibt ja genug andere Spielkonzepte, die ohne GUI auskommen und auch Spaß machen können

Re: Reaktionsspiel TikoTako
Verfasst: Donnerstag 6. November 2025, 23:41
von sparrow
Hatten wir so etwas nicht schonmal hier im Forum? Irgemdwas dämmert mir da.
Re: Reaktionsspiel TikoTako
Verfasst: Freitag 7. November 2025, 00:39
von snafu
Verstehe ich die Anforderung gerade falsch? Ein Timer lässt sich doch auch ohne Nebenläufigkeit programmieren. Dazu nutzt man eine Schleife, die in kurzen Intervallen die aktuelle Zeit abfragt. Rechnet man diese minus der Startzeit, hat man die vergangene Zeit und stoppt die Schleife via break, wenn das Zeitlimit überschritten wurde. Zwischen diesen Abfragen betreibt man die Interaktion mit dem User.
Re: Reaktionsspiel TikoTako
Verfasst: Freitag 7. November 2025, 01:56
von __blackjack__
@snafu Wie betreibst Du denn die Interaktion mit dem Benutzer? Also Test auf Tastendruck der nicht blockiert. Plattformübergreifend. Anfängerfreundlich. Da ist `curses` raus — bei beiden Punkten. Weswegen ich `blessed` in den Ring geworfen habe.
Re: Reaktionsspiel TikoTako
Verfasst: Freitag 7. November 2025, 02:09
von __blackjack__
@Herkule: Das die Timer nacheinander ablaufen sollen ist schon klar, dafür muss aber das Programm nicht so geschrieben sein, dass dort Code steht der linear abgearbeitet wird. GUIs sind ereignisorientiert. Da schreibt man das Programm so runter wie es dann ablaufen wird, sondern man registriert Funktionen/Methoden die bei bestimmten Ereignissen aufgerufen werden, und die dann (kurz) etwas machen können, als Reaktion auf das Ereignis. Und dann ruft man die Hauptschleife von der GUI auf.
Typische Ereignisse sind Button-Klicks, oder Tastendrücke, aber auch Timer-Ereignisse die ausgelöst werden wenn eine Zeitspanne abgelaufen ist.
Ein lineares Programm wäre erst ein `input()` zu schreiben wo der Benutzer nach dem Namen gefragt wird, und dann ein `input()` wo man nach dem Geburtsjahr fragt, und dann Code der das aktuelle Alter ausrechnet, und danach dann "Hallo {name}, Du bist {n} Jahre alt" ausgibt.
Bei einer GUI würde man zwei Eingabefelder für Name und Alter erstellen, und einen Button "OK". Und für diesen Button dann eine Methode angeben, die Aufgerufen werden soll wenn der Benutzer drauf klickt. Und dann ruft man die Hauptschleife auf. Der Benutzer kann dann entscheiden in welcher Reihenfolge er die Felder ausfüllen möchte und dann auf den Button drücken. Dann ruft die Hauptschleife von der GUI die Methode auf die man angegeben hat, und in der kann man sich dann die Informationen aus den Eingabefeldern holen und beispielsweise ein neues Fenster mit dem Text öffnen lassen, den man im alten Programm mit `print()` ausgegeben hätte.
Re: Reaktionsspiel TikoTako
Verfasst: Freitag 7. November 2025, 11:39
von Herkule
https://github.com/jquast/blessed sieht interessant aus! Das kannte ich noch nicht.
Ursprünglich, wollte ich nur eine Taste auswerten. Druck und loslassen, als getrennte "events". Das wäre wohl mit Kitty möglich, aber vielleicht geht es einfacher, wenn ich stattdessen zwei verschiedene Maustasten benutze.

Re: Reaktionsspiel TikoTako
Verfasst: Freitag 7. November 2025, 12:31
von __blackjack__
@Herkule: Das Kitty-Protokoll ist noch nicht so weit verbreitet, Mäuse gibt's bedeutend länger.

Re: Reaktionsspiel Tikitakogame
Verfasst: Freitag 7. November 2025, 12:37
von Herkule
Also dann gerade Ziffern = Linke Maustaste drücken
Ungerade Ziffern = Rechte Maustaste drücken, um den Timer zu stoppen.
Buchstaben, dürfen nicht mit Ziffern verwechselt werden können. Buchstaben ( XYVAWTZKGMN)
Edit: Dann wartet noch die schwierigste Aufgabe, der Eventloop. Der Wie ein Film abläuft, und das Spielgeschehen ausmacht.

Re: Reaktionsspiel TikoTako
Verfasst: Freitag 7. November 2025, 14:45
von snafu
__blackjack__ hat geschrieben: Freitag 7. November 2025, 01:56
@snafu Wie betreibst Du denn die Interaktion mit dem Benutzer? Also Test auf Tastendruck der nicht blockiert. Plattformübergreifend. Anfängerfreundlich. Da ist `curses` raus — bei beiden Punkten. Weswegen ich `blessed` in den Ring geworfen habe.
Ich dachte jetzt an Polling oder per select() auf STDIN mit entsprechendem Timeout lauschen. Hab ich aber ehrlicherweise noch nie konkret mit blockierenden Abfragen umgesetzt. Bisher bloß mit einer Schleife, wo man Dinge tun oder ausgeben kann, während der Timer / Countdown aktiv ist. Da braucht man dann im Wesentlichen nur die beschriebenen Zeitdifferenzen als Grundlage. Keine Ahnung, wieviel Aufwand das in diesem Fall mit Benutzereingaben wäre. Zumal Windows bei dem Thema select() / Polling auch schon raus wäre.
Jedenfalls ist gegen ``blessed`` nichts einzuwenden. Damit kann man sich eine schöne Lösung für das Terminal bauen, ohne ein GUI-Framework für die Aufgabe bemühen zu müssen.

Re: Reaktionsspiel TikoTako
Verfasst: Freitag 7. November 2025, 15:53
von __blackjack__
@snafu: Wobei der Maus-Support von `blessed` ”interessant” ist. Habe mehrere Terminal-Emulatoren getestet und nur unter XTerm hat das funktioniert, und das auch nur teilweise. Da gab es keine Attribute `x` und `y` sondern `mouse_xy` mit einem Tupel. *Alle* getesteten Terminal-Emulatoren haben aber in anderen Anwendungen keine Probleme mit der Maus. Also beispielsweise `htop` oder Midnight Commander lassen sich dort mit der Maus nutzen. Wahrscheinlich gehen die gar nicht über das Terminal sondern verwenden den GPM-Server.
Platformübergreifend Maus ist also auch nicht so einfach. Es läuft da irgendwie doch auf GUI hinaus. PyGame falls man sich die Ereignisschleife selber basteln möchte.
PS: Habe mir die Abhängigkeiten von Midnight Commander und `htop` mal angeschaut: Midnight Commander benutzt direkt die `libgpm2`, und `htop` macht das indirekt über `libncurses`.