Initial Game Logic 2
This commit is contained in:
@@ -29,6 +29,7 @@ def lobby(request, join_code):
|
||||
participant = QuizGameParticipant.objects.get(participant_id=participant_id)
|
||||
if not participant.quiz_game.join_code == join_code: # Teilnehmer dem richtigen Spiel hinzufügen
|
||||
participant.quiz_game = quiz_game
|
||||
participant.score = 0 # Reset score when joining new game
|
||||
participant.save()
|
||||
except QuizGameParticipant.DoesNotExist:
|
||||
return redirect('play:create_participant', join_code=join_code)
|
||||
@@ -37,34 +38,41 @@ def lobby(request, join_code):
|
||||
return render(request, 'play/lobby.html', context=context)
|
||||
|
||||
def create_participant(request, join_code):
|
||||
quiz_game = get_object_or_404(QuizGame, join_code=join_code)
|
||||
|
||||
if "participant_id" in request.COOKIES:
|
||||
# Prüfe ob der Teilnehmer noch existiert
|
||||
participant_id = request.COOKIES['participant_id']
|
||||
try:
|
||||
participant = QuizGameParticipant.objects.get(participant_id=participant_id)
|
||||
if participant.quiz_game.join_code != join_code:
|
||||
participant.quiz_game = quiz_game
|
||||
participant.score = 0 # Reset score when joining new game
|
||||
participant.save()
|
||||
return redirect('play:lobby', join_code=join_code)
|
||||
except QuizGameParticipant.DoesNotExist:
|
||||
# Cookie löschen wenn Teilnehmer nicht mehr existiert
|
||||
response = HttpResponseRedirect(request.path)
|
||||
response.delete_cookie('participant_id')
|
||||
return response
|
||||
|
||||
if request.method == 'POST':
|
||||
display_name = request.POST.get('display_name')
|
||||
join_code = request.POST.get('join_code')
|
||||
try:
|
||||
quiz = QuizGame.objects.get(join_code=join_code)
|
||||
participant = QuizGameParticipant()
|
||||
participant.display_name = display_name
|
||||
participant.quiz_game = quiz
|
||||
participant.save()
|
||||
if not display_name:
|
||||
return render(request, 'play/initialize_participant.html', {
|
||||
'join_code': join_code,
|
||||
'error': 'Bitte geben Sie einen Namen ein'
|
||||
})
|
||||
|
||||
response = HttpResponseRedirect(reverse('play:lobby', kwargs={'join_code': join_code}))
|
||||
response.set_cookie('participant_id', participant.participant_id, max_age=3600)
|
||||
participant = QuizGameParticipant()
|
||||
participant.display_name = display_name
|
||||
participant.quiz_game = quiz_game
|
||||
participant.score = 0 # Initialize score
|
||||
participant.save()
|
||||
|
||||
return response
|
||||
except QuizGame.DoesNotExist:
|
||||
# TODO: Fehlermeldung fuer nicht-existierendes Quiz
|
||||
pass
|
||||
response = HttpResponseRedirect(reverse('play:lobby', kwargs={'join_code': join_code}))
|
||||
response.set_cookie('participant_id', participant.participant_id, max_age=3600)
|
||||
return response
|
||||
|
||||
return render(request, 'play/initialize_participant.html', {'join_code': join_code})
|
||||
|
||||
@@ -89,32 +97,162 @@ def join_game(request):
|
||||
join_code = request.POST.get('game_code')
|
||||
try:
|
||||
quiz = QuizGame.objects.get(join_code=join_code)
|
||||
# Redirect to create_participant if no participant cookie exists
|
||||
if not "participant_id" in request.COOKIES:
|
||||
return redirect('play:create_participant', join_code=join_code)
|
||||
return redirect('play:lobby', join_code=join_code)
|
||||
except QuizGame.DoesNotExist:
|
||||
# TODO: Mit message eine Fehlermeldung weitergeben (und im entsprechenden Template Designen)
|
||||
pass
|
||||
return render(request, 'play/join_game.html')
|
||||
|
||||
def question(request, join_code, question_id):
|
||||
question = get_object_or_404(QivipQuestion, pk=question_id)
|
||||
def finished(request, join_code):
|
||||
try:
|
||||
game = QuizGame.objects.get(join_code=join_code)
|
||||
participant = None
|
||||
participant_id = request.session.get('participant_id')
|
||||
if participant_id:
|
||||
participant = QuizGameParticipant.objects.filter(
|
||||
quiz_game=game,
|
||||
participant_id=participant_id
|
||||
).first()
|
||||
|
||||
if question.data:
|
||||
question.data = json.loads(question.data)
|
||||
context = {
|
||||
'join_code': join_code,
|
||||
'is_host': str(game.host_id) == str(request.session.get('host_id')),
|
||||
'participant_id': participant_id if participant else None
|
||||
}
|
||||
return render(request, 'play/game/finished.html', context)
|
||||
except QuizGame.DoesNotExist:
|
||||
return redirect('home')
|
||||
|
||||
context = {
|
||||
'question': question,
|
||||
}
|
||||
def scores(request, join_code):
|
||||
quiz_game = get_object_or_404(QuizGame, join_code=join_code)
|
||||
|
||||
# Verify game state
|
||||
if quiz_game.current_state != 'scores':
|
||||
return redirect('play:lobby', join_code=join_code)
|
||||
|
||||
# Get participants sorted by score
|
||||
participants = QuizGameParticipant.objects.filter(quiz_game=quiz_game).order_by('-score')
|
||||
|
||||
# Check if user is host
|
||||
is_host = False
|
||||
if 'host_id' in request.COOKIES and request.COOKIES['host_id'] == quiz_game.host_id:
|
||||
is_host = True
|
||||
|
||||
# Get current question for context
|
||||
questions = quiz_game.quiz_id.questions.all()
|
||||
current_question = questions[quiz_game.current_question_index]
|
||||
question_data = json.loads(current_question.data)
|
||||
|
||||
return render(request, 'play/game/score_overview.html', {
|
||||
'quiz_game': quiz_game,
|
||||
'participants': participants,
|
||||
'is_host': is_host,
|
||||
'host_id': quiz_game.host_id if is_host else None,
|
||||
'is_last_question': quiz_game.current_question_index + 1 >= len(questions),
|
||||
'question_data': question_data,
|
||||
'question_index': quiz_game.current_question_index,
|
||||
'total_questions': len(questions)
|
||||
})
|
||||
|
||||
return render(request, 'play/game/question_host.html', {'question': question, 'debug': "debug"})
|
||||
def finished(request, join_code):
|
||||
quiz_game = get_object_or_404(QuizGame, join_code=join_code)
|
||||
|
||||
# Verify game state
|
||||
if quiz_game.current_state != 'finished':
|
||||
return redirect('play:lobby', join_code=join_code)
|
||||
|
||||
# Get participants sorted by score
|
||||
participants = QuizGameParticipant.objects.filter(quiz_game=quiz_game).order_by('-score')
|
||||
|
||||
# Check if user is host
|
||||
is_host = False
|
||||
if 'host_id' in request.COOKIES and request.COOKIES['host_id'] == quiz_game.host_id:
|
||||
is_host = True
|
||||
|
||||
def question_participant(request, join_code, question_id):
|
||||
question = get_object_or_404(QivipQuestion, pk=question_id)
|
||||
# Get participant if exists
|
||||
participant_id = request.COOKIES.get('participant_id')
|
||||
participant = None
|
||||
if participant_id:
|
||||
participant = QuizGameParticipant.objects.filter(
|
||||
quiz_game=quiz_game,
|
||||
participant_id=participant_id
|
||||
).first()
|
||||
|
||||
return render(request, 'play/game/finished.html', {
|
||||
'quiz_game': quiz_game,
|
||||
'participants': participants,
|
||||
'winner': participants.first() if participants.exists() else None,
|
||||
'join_code': join_code,
|
||||
'is_host': is_host,
|
||||
'participant_id': participant_id if participant else None
|
||||
})
|
||||
|
||||
if question.data:
|
||||
question.data = json.loads(question.data)
|
||||
def question(request, join_code):
|
||||
quiz_game = get_object_or_404(QuizGame, join_code=join_code)
|
||||
|
||||
# Verify game state
|
||||
if quiz_game.current_state != 'question':
|
||||
return redirect('play:lobby', join_code=join_code)
|
||||
|
||||
# Get current question
|
||||
questions = quiz_game.quiz_id.questions.all()
|
||||
if quiz_game.current_question_index >= len(questions):
|
||||
return redirect('play:lobby', join_code=join_code)
|
||||
|
||||
current_question = questions[quiz_game.current_question_index]
|
||||
question_data = json.loads(current_question.data)
|
||||
|
||||
# Check if user is host
|
||||
if 'host_id' in request.COOKIES and request.COOKIES['host_id'] == quiz_game.host_id:
|
||||
return render(request, 'play/game/question_host.html', {
|
||||
'quiz_game': quiz_game,
|
||||
'question_data': question_data,
|
||||
'host_id': quiz_game.host_id,
|
||||
'start_time': int(quiz_game.question_start_time.timestamp() * 1000),
|
||||
'question_index': quiz_game.current_question_index,
|
||||
'total_questions': len(questions)
|
||||
})
|
||||
|
||||
# Handle participant view
|
||||
if not 'participant_id' in request.COOKIES:
|
||||
return redirect('play:create_participant', join_code=join_code)
|
||||
|
||||
participant_id = request.COOKIES['participant_id']
|
||||
try:
|
||||
participant = QuizGameParticipant.objects.get(participant_id=participant_id)
|
||||
except QuizGameParticipant.DoesNotExist:
|
||||
return redirect('play:create_participant', join_code=join_code)
|
||||
|
||||
return render(request, 'play/game/question_participant.html', {
|
||||
'quiz_game': quiz_game,
|
||||
'question_data': question_data,
|
||||
'participant': participant,
|
||||
'start_time': int(quiz_game.question_start_time.timestamp() * 1000),
|
||||
'question_index': quiz_game.current_question_index,
|
||||
'total_questions': len(questions)
|
||||
})
|
||||
|
||||
context = {
|
||||
'question': question,
|
||||
}
|
||||
|
||||
return render(request, 'play/game/question_participant.html', {'question': question, 'debug': "debug"})
|
||||
def waiting_room(request, join_code):
|
||||
quiz_game = get_object_or_404(QuizGame, join_code=join_code)
|
||||
|
||||
# Check if user is host
|
||||
if 'host_id' in request.COOKIES and request.COOKIES['host_id'] == quiz_game.host_id:
|
||||
return redirect('play:question', join_code=join_code)
|
||||
|
||||
# Handle participant view
|
||||
if not 'participant_id' in request.COOKIES:
|
||||
return redirect('play:create_participant', join_code=join_code)
|
||||
|
||||
participant_id = request.COOKIES['participant_id']
|
||||
try:
|
||||
participant = QuizGameParticipant.objects.get(participant_id=participant_id)
|
||||
except QuizGameParticipant.DoesNotExist:
|
||||
return redirect('play:create_participant', join_code=join_code)
|
||||
|
||||
return render(request, 'play/game/wait_for_other_players.html', {
|
||||
'quiz_game': quiz_game,
|
||||
'participant': participant
|
||||
})
|
||||
Reference in New Issue
Block a user