from django.shortcuts import render, redirect from django.urls import reverse from django.utils.http import urlencode import app.models as AppDB import random import string def random_alphabet(playerCount, listOfUsed): full_alphabet = ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J") game_alphabet = full_alphabet[:playerCount+1] # Verfügbare Buchstaben berechnen available_letters = list(set(game_alphabet) - set(listOfUsed)) # Optional: sortieren (wenn Reihenfolge wichtig ist) available_letters.sort() # Zufälligen Buchstaben wählen (falls verfügbar) if available_letters: chosen_letter = random.choice(available_letters) print(f"Ausgewählter Buchstabe: {chosen_letter}") return chosen_letter else: print("Keine Buchstaben mehr verfügbar.") return "X" def generate_key_view(): key = ''.join(random.choices(string.ascii_uppercase + string.digits, k=14)) # Optional: Stelle sicher, dass der Key einzigartig ist while AppDB.games.objects.filter(key=key).exists(): key = ''.join(random.choices(string.ascii_uppercase + string.digits, k=14)) AppDB.games.objects.create(key=key) return key def home(request): if request.method == "POST": generate_key_view() requestGames = AppDB.games.objects.all() return render(request, 'app/home.html', {'games':requestGames}) def game(request): game_key = request.GET.get("key") base_url = reverse("game") query_string = urlencode({"key": game_key}) game_instance = AppDB.games.objects.get(key=game_key) player_name = request.session.get("device_name") player_instance = AppDB.Player.objects.get(name=player_name) if player_name else None openAnswer = True if AppDB.answer.objects.filter(player=player_instance).exists() else False players_inGame = AppDB.Player.objects.filter(game=game_instance) if request.method == "POST": if "btn_login_name" in request.POST: input_PlayerName = request.POST.get("input_newPlayerName") request.session["device_name"] = input_PlayerName newEntry_Player = AppDB.Player() if not players_inGame.exists(): newEntry_Player.leader = True newEntry_Player.game = game_instance print(query_string) newEntry_Player.name = input_PlayerName newEntry_Player.save() # Redirect mit key return redirect(f"{base_url}?{query_string}") if "btn_logout" in request.POST: toDeleteEntry = AppDB.Player.objects.get(name=player_name) toDeleteEntry.delete() request.session.flush() # oder: del request.session["device_name"] return redirect(f"{base_url}?{query_string}") if "btn_start" in request.POST: game_instance.round_open = True game_instance.save() if "btn_stop" in request.POST: game_instance.round_open = False game_instance.save() if "btn_clear" in request.POST: AppDB.answer.objects.filter(player__game=game_instance).delete() if "btn_sendAnswer" in request.POST: sendAnswer = AppDB.answer() sendAnswer.answer = request.POST.get("input_answer") sendAnswer.player = player_instance sendAnswer.akey = random_alphabet(players_inGame.count(), AppDB.answer.objects.filter(player__game=game_instance.id).values_list('akey', flat=True)) sendAnswer.save() openAnswer = False return redirect(f"{base_url}?{query_string}") return render(request, "app/game.html", { "has_name": player_name, "game_key": game_key, 'player_data': player_instance, "round_open": game_instance.round_open, "openAnswer": openAnswer, "answers": AppDB.answer.objects.filter(player__game=game_instance.id).order_by("akey"), 'countPlayers':players_inGame.count(), })