Compare commits
3 Commits
b5c4c38735
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| cd86c78698 | |||
| e842f88f02 | |||
| fa6c8c2d98 |
73
README.md
Normal file
73
README.md
Normal 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.
|
||||||
BIN
_start.mp3
BIN
_start.mp3
Binary file not shown.
8
game.py
8
game.py
@@ -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":
|
||||||
|
|||||||
Reference in New Issue
Block a user