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
|
||||
|
||||
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
|
||||
|
||||
self.status_label.config(text="Zeitmessung läuft...")
|
||||
@@ -482,13 +482,13 @@ class TimeGuessGame:
|
||||
|
||||
# Sound-Ausgabe, je nach Zeitabweichung
|
||||
if deviation_abs_sec >= 10:
|
||||
fail = pygame.mixer.Sound("fail.mp3")
|
||||
fail = pygame.mixer.Sound("resources/audio/fail.mp3")
|
||||
pygame.mixer.Sound.play(fail)
|
||||
elif deviation_abs_sec == 0:
|
||||
winner = pygame.mixer.Sound("winner.mp3")
|
||||
winner = pygame.mixer.Sound("resources/audio/winner.mp3")
|
||||
pygame.mixer.Sound.play(winner)
|
||||
else:
|
||||
fail = pygame.mixer.Sound("good.mp3")
|
||||
fail = pygame.mixer.Sound("resources/audio/good.mp3")
|
||||
pygame.mixer.Sound.play(fail)
|
||||
|
||||
elif message == "GAME_ENDED":
|
||||
|
||||
Reference in New Issue
Block a user