Check for existing names in leader board
This commit is contained in:
48
game.py
48
game.py
@@ -536,36 +536,62 @@ class TimeGuessGame:
|
|||||||
|
|
||||||
# Stelle sicher, dass Spieldaten vorhanden und gültig sind
|
# Stelle sicher, dass Spieldaten vorhanden und gültig sind
|
||||||
if self.current_game and 'target_time' in self.current_game and 'elapsed_time' in self.current_game and 'deviation' in self.current_game:
|
if self.current_game and 'target_time' in self.current_game and 'elapsed_time' in self.current_game and 'deviation' in self.current_game:
|
||||||
|
# Prüfen, ob der Name bereits in der Rangliste vorhanden ist
|
||||||
|
for i, entry in enumerate(self.leaderboard):
|
||||||
|
if entry['name'] == name:
|
||||||
|
# Dialog anzeigen
|
||||||
|
answer = messagebox.askquestion("Name bereits vorhanden",
|
||||||
|
"Der Name ist bereits in der Rangliste vorhanden. Möchtest du ihn überschreiben?",
|
||||||
|
icon='warning', parent=self.root)
|
||||||
|
if answer == 'yes':
|
||||||
|
# Eintrag überschreiben
|
||||||
|
self.leaderboard[i] = {
|
||||||
|
'name': name,
|
||||||
|
'target_time': self.current_game['target_time'],
|
||||||
|
'elapsed_time': self.current_game['elapsed_time'],
|
||||||
|
'deviation': self.current_game['deviation']
|
||||||
|
}
|
||||||
|
self.leaderboard.sort(key=lambda x: abs(x['deviation']))
|
||||||
|
self.save_leaderboard()
|
||||||
|
self.update_leaderboard_display()
|
||||||
|
|
||||||
|
# UI aktualisieren und Buttons deaktivieren
|
||||||
|
self.name_entry.delete(0, tk.END)
|
||||||
|
self.submit_button.config(state=tk.DISABLED)
|
||||||
|
self.skip_button.config(state=tk.DISABLED)
|
||||||
|
self.status_label.config(text="Bereit für ein neues Spiel")
|
||||||
|
messagebox.showinfo("Rangliste", f"'{name}' wurde überschrieben!", parent=self.root)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
# Speichern abbrechen
|
||||||
|
return
|
||||||
|
|
||||||
|
# Wenn der Name nicht vorhanden ist, neuen Eintrag hinzufügen
|
||||||
entry = {
|
entry = {
|
||||||
'name': name,
|
'name': name,
|
||||||
'target_time': self.current_game['target_time'],
|
'target_time': self.current_game['target_time'],
|
||||||
'elapsed_time': self.current_game['elapsed_time'],
|
'elapsed_time': self.current_game['elapsed_time'],
|
||||||
'deviation': self.current_game['deviation']
|
'deviation': self.current_game['deviation']
|
||||||
}
|
}
|
||||||
|
|
||||||
self.leaderboard.append(entry)
|
self.leaderboard.append(entry)
|
||||||
self.leaderboard.sort(key=lambda x: abs(x['deviation'])) # Sortieren nach absoluter Abweichung
|
self.leaderboard.sort(key=lambda x: abs(x['deviation']))
|
||||||
|
|
||||||
# Nur Top N behalten (optional)
|
# Nur Top N behalten (optional)
|
||||||
max_leaderboard_size = 20
|
max_leaderboard_size = 20
|
||||||
if len(self.leaderboard) > max_leaderboard_size:
|
if len(self.leaderboard) > max_leaderboard_size:
|
||||||
self.leaderboard = self.leaderboard[:max_leaderboard_size]
|
self.leaderboard = self.leaderboard[:max_leaderboard_size]
|
||||||
|
|
||||||
self.save_leaderboard()
|
self.save_leaderboard()
|
||||||
self.update_leaderboard_display() # Rangliste aktualisieren
|
self.update_leaderboard_display()
|
||||||
|
|
||||||
# UI zurücksetzen für nächste Runde/Eingabe
|
# UI aktualisieren und Buttons deaktivieren
|
||||||
self.name_entry.delete(0, tk.END)
|
self.name_entry.delete(0, tk.END)
|
||||||
self.submit_button.config(state=tk.DISABLED) # Deaktivieren bis nächstes Spielende
|
self.submit_button.config(state=tk.DISABLED)
|
||||||
self.skip_button.config(state=tk.DISABLED)
|
self.skip_button.config(state=tk.DISABLED)
|
||||||
self.status_label.config(text="Bereit für ein neues Spiel") # Status aktualisieren
|
self.status_label.config(text="Bereit für ein neues Spiel")
|
||||||
# Alte Spielergebnisse bleiben sichtbar bis zum nächsten Spielstart
|
|
||||||
messagebox.showinfo("Rangliste", f"'{name}' zur Rangliste hinzugefügt!", parent=self.root)
|
messagebox.showinfo("Rangliste", f"'{name}' zur Rangliste hinzugefügt!", parent=self.root)
|
||||||
else:
|
else:
|
||||||
messagebox.showerror("Fehler", "Keine gültigen Spieldaten zum Speichern vorhanden.\nBitte zuerst ein Spiel beenden.", parent=self.root)
|
messagebox.showerror("Fehler", "Keine gültigen Spieldaten zum Speichern vorhanden.\nBitte zuerst ein Spiel beenden.", parent=self.root)
|
||||||
self.submit_button.config(state=tk.DISABLED) # Sicherstellen, dass Button deaktiviert ist
|
self.submit_button.config(state=tk.DISABLED) # Sicherstellen, dass Button deaktiviert ist
|
||||||
self.skip_button.config(state=tk.DISABLED)
|
self.skip_button.config(state=tk.DISABLED)
|
||||||
|
|
||||||
def skip_score(self):
|
def skip_score(self):
|
||||||
# UI zurücksetzen ohne Score zu speichern
|
# UI zurücksetzen ohne Score zu speichern
|
||||||
self.name_entry.delete(0, tk.END)
|
self.name_entry.delete(0, tk.END)
|
||||||
|
|||||||
Reference in New Issue
Block a user