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"))