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

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(),
})

Powered by TurnKey Linux.