diff --git a/game/forms.py b/game/forms.py index c90e286..a548455 100644 --- a/game/forms.py +++ b/game/forms.py @@ -57,4 +57,5 @@ class AnswerForm(forms.Form): if (ma := music.musicgameanswer_set.filter(player=user).first()) and ma.answer else "", + disabled=game.over, ) diff --git a/game/templates/game/musikgame_answer.html b/game/templates/game/musikgame_answer.html index 932d55e..84e055d 100644 --- a/game/templates/game/musikgame_answer.html +++ b/game/templates/game/musikgame_answer.html @@ -21,6 +21,6 @@ {% endfor %} - + {% if not musikgame.over %}{% endif %} {% endblock content %} diff --git a/game/templates/game/musikgame_detail.html b/game/templates/game/musikgame_detail.html index 5bf75d5..4130ef3 100644 --- a/game/templates/game/musikgame_detail.html +++ b/game/templates/game/musikgame_detail.html @@ -17,7 +17,11 @@ href="{% yt_playlist musikgame %}" role="button" {% if musikgame.playlist_loading %}aria-busy="true"{% endif %}> Playlist - {% if not musikgame.over %} + {% if musikgame.over %} + Mes réponses + {% else %} Répondre {% endif %} diff --git a/game/views.py b/game/views.py index b381b61..b96cb2b 100644 --- a/game/views.py +++ b/game/views.py @@ -434,7 +434,7 @@ class GameAnswerView(LoginRequiredMixin, DetailView): template_name = "game/musikgame_answer.html" def get_queryset(self): - return super().get_queryset().filter(over=False, players=self.request.user) + return super().get_queryset().filter(players=self.request.user) def get_context_data(self, **kwargs): return super().get_context_data(**kwargs) | { @@ -443,6 +443,8 @@ class GameAnswerView(LoginRequiredMixin, DetailView): def post(self, request, pk): game = self.get_object() + if game.over: + raise PermissionDenied() for music in game.musicgameorder_set.all(): answer = request.POST.get(f"answer-{music.order}") if answer: @@ -469,16 +471,28 @@ class GameEndView(LoginRequiredMixin, SingleObjectMixin, View): raise PermissionDenied() game.over = True + value = {} + for go in game.musicgameorder_set.all(): + value[go.pk] = 1000 / ( + 1 + + ( + (go.musicgameanswer_set.filter(game__player=F("answer")).count()) + - 1 / game.players.count() + ) + ** 2 + ) + for player in game.players.all(): - score = ( - 100 - * player.musicgameanswer_set.filter(game__game=game) - .exclude(game__player=player) - .filter(game__player=F("answer")) - .count() + score = sum( + [ + value[ga.game.pk] + for ga in player.musicgameanswer_set.filter(game__game=game) + .exclude(game__player=player) + .filter(game__player=F("answer")) + ] ) score -= ( - 50 + 500 * player.musicgameanswer_set.filter(game__game=game) .filter(game__player=player) .exclude(game__player=F("answer"))