Compare commits

..

3 Commits

Author SHA1 Message Date
cd86c78698 Moved audio files in seperate directory and changed code accordingly 2025-04-27 13:51:28 +02:00
e842f88f02 Adding README 2025-04-27 13:46:27 +02:00
fa6c8c2d98 Deleting old start sound 2025-04-27 13:29:55 +02:00
8 changed files with 77 additions and 4 deletions

73
README.md Normal file
View File

@@ -0,0 +1,73 @@
# Zeitschätzspiel
Es handelt sich um ein einfaches Zeitschätzspiel, bei dem eine vorgegebene Zeit möglichst genau abgeschätzt werden muss.\
Zur Zeitmessung und Auswertung der Eingaben wird ein Arduino verwendet. Die grafische Darstellung und die Verwaltung der
Spielergebnisse erfolgt mit einem Python Programm. Die Kommunikation zwischen Arduino und GUI erfolgt textbasiert über
eine Serielle Schnittstelle.
## Benötigtes Material
- Arduino mit USB-Schnittstelle
- Taster (z.B. Grobhandtaster)
## Hardwareaufbau
Der Hardwareaufbau ist denkbar einfach. Dazu wird der verwendete Taster mit GND und Pin2 am Arduino verbunden.\
Es wird kein zusätzlicher Pull-Up Widerstand benötigt, da der interne Pull-Up Widerstand vom Arduino verwendet wird.
## Abhängigkeiten
### Arduino Sketch
Der Arduino Sketch greift ausschließlich auf Systemfunktionen zu und benötigt keine zusätzlichen Librarys.
### Python Frontend
- python3
- pip3
- tkinter
- pygame
## Installation
``` BASH
sudo apt update
sudo apt install python3 python3-pip python3-tk python3-pygame
git clone https://git.dorf.cloud/lukasdietz/Zeitschaetzspiel.git
cd ../Zeitschaetzspiel
```
Den Arduino Sketch ``../Zeitschaetzspiel/Arduino/Zeitschaetzspiel.ino`` auf den Aruino übertragen und ggf. prüfen, ob eine
serielle Kommunikation (9600 Baud) mit dem Arduino möglich ist.
## Verwendung
Das Frontent wird mit ``python3 game.py`` gestartet.
Nach dem öffnen der Oberfläche muss der Arduino verbunden werden. Dazu im Menü **Verbindung -> Verbinden** benutzen und den entsprechenden Seriellen Port angeben.
Nach erfolgreichem Verbindungsaufbau kann über den Button **Neues Spiel starten** ein Spiel gestartet werden.
Es wird vom Arduino eine zufällige ganzzahlige Zeit zwischen 5 und 30 Sekunden vorgegeben und als Zielzeit angezeigt.\
Mit dem ersten Tastendruck wird die Zeitmessung gestartet und durch eine Tonausgabe signalisiert.\
Beim zweiten Tastendruck wird die Zeitmessung gestoppt und sowohl die geschätzte Zeit, als auch die Abweichung in Sekunden angezeigt.
Möchte sich der Spieler in die Rangliste aufnehmen lassen, besteht nun die Möglichkeit einen Namen einzutragen und den Messwert in die Rangliste zu speichern.
Ist der eingegebene Namen bereits in der Rangliste enthalten bietet das Programm zwei Möglichkeiten an:
1. Namen beibehalten und alten Datensatz überschreiben
2. Neuen Namen eingeben und neuen Datensatz speichern
Soll das Spielergebnis nicht in die Rangliste aufgenommen werden, kann direkt ein neues Spiel gestartet werden.
## Rangliste
In der Oberfläche werden immer die 20 besten Messungen mit Namen, Zielzeit, Sollzeit und Abweichung angezeigt. Maßgeblich für die Sortierung ist die Abweichung zwischen Sollzeit und gemessener Zeit.
Die Rangliste wird in der Datei leaderboard.json im Verzeichnis des Spiels gespeichert und beim nächsten Start des Programms automatisch wieder geladen.
Über den Menüpunkt **Datei -> Rangliste zurücksetzen** werden alle Messungen aus der Rangliste entfernt.
## Lizenzinformationen
Die Verwendeten Sounddateien stammen von pixybay.com und stehen zur kostenlosen Nutzung unter der [Pixabay-Inhaltslizenz](https://pixabay.com/de/service/license-summary/) zur Verfügung.

Binary file not shown.

View File

@@ -452,7 +452,7 @@ class TimeGuessGame:
self.status_label.config(text="Bereit zum Start") # Klarerer Status self.status_label.config(text="Bereit zum Start") # Klarerer Status
elif message == "TIME_STARTED": elif message == "TIME_STARTED":
startsound = pygame.mixer.Sound("start.mp3") # Start-Sound setzen startsound = pygame.mixer.Sound("resources/audio/start.mp3") # Start-Sound setzen
pygame.mixer.Sound.play(startsound) # Start-Sound abspielen pygame.mixer.Sound.play(startsound) # Start-Sound abspielen
self.status_label.config(text="Zeitmessung läuft...") self.status_label.config(text="Zeitmessung läuft...")
@@ -482,13 +482,13 @@ class TimeGuessGame:
# Sound-Ausgabe, je nach Zeitabweichung # Sound-Ausgabe, je nach Zeitabweichung
if deviation_abs_sec >= 10: if deviation_abs_sec >= 10:
fail = pygame.mixer.Sound("fail.mp3") fail = pygame.mixer.Sound("resources/audio/fail.mp3")
pygame.mixer.Sound.play(fail) pygame.mixer.Sound.play(fail)
elif deviation_abs_sec == 0: elif deviation_abs_sec == 0:
winner = pygame.mixer.Sound("winner.mp3") winner = pygame.mixer.Sound("resources/audio/winner.mp3")
pygame.mixer.Sound.play(winner) pygame.mixer.Sound.play(winner)
else: else:
fail = pygame.mixer.Sound("good.mp3") fail = pygame.mixer.Sound("resources/audio/good.mp3")
pygame.mixer.Sound.play(fail) pygame.mixer.Sound.play(fail)
elif message == "GAME_ENDED": elif message == "GAME_ENDED":