You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.9 KiB
106 lines
3.9 KiB
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(),
|
|
}) |