From 7a5c37290f50890b9372ea8ca005302093ce002e Mon Sep 17 00:00:00 2001 From: Asger Geel Weirsoee Date: Tue, 20 Oct 2026 21:59:59 +0200 Subject: [PATCH] =?UTF-8?q?Spionen:=20sk=C3=A6rmenes=20overskrifter=20f?= =?UTF-8?q?=C3=B8lger,=20hvem=20der=20blev=20fanget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fra review og QA: - Telefonen siger "Du slap væk!" til en spion, der ikke selv blev fanget (også når den anden spion blev det), "Du gættede ordet!" til den fangede spion, der gættede, og agenterne får "I fangede den ene spion", når den anden slap. - Går den eneste spion i runden, siger storskærmen "Spionen forlod missionen" og telefonerne "Spionen forlod spillet" i stedet for, at spionen vandt (result.spies_left). - Lighedsstemplet siger "spionerne slipper" med to spioner. Co-Authored-By: Claude Opus 5.5 --- party/static/party/spion-fixtures.js | 1 + party/static/party/spion.js | 15 ++++++++++----- spionen/engine.py | 3 ++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/party/static/party/spion-fixtures.js b/party/static/party/spion-fixtures.js index 17956a6..4669c1f 100644 --- a/party/static/party/spion-fixtures.js +++ b/party/static/party/spion-fixtures.js @@ -81,6 +81,7 @@ var two = phase === 'result-two'; host.result = { spies: two ? ['p2', 'p5'] : ['p2'], spy_names: two ? ['Sus', 'Kasper'] : ['Sus'], word: 'flyvemaskine', caught: 'p2', guess: { text: 'helikopter', correct: false }, spy_won: false, + spies_left: false, deltas: two ? { p1: 100, p3: 100, p4: 0, p5: 300, p6: 100, p2: 0 } : { p1: 100, p3: 100, p4: 100, p5: 100, p6: 0, p2: 0 } }; host.deadline = now + 8000; break; diff --git a/party/static/party/spion.js b/party/static/party/spion.js index 9e8d6a0..67b2cda 100644 --- a/party/static/party/spion.js +++ b/party/static/party/spion.js @@ -103,8 +103,12 @@ }; play.result = function (state, me) { var r = state.result || {}, mine = (r.deltas || {})[me.id]; - var spy = (r.spies || []).indexOf(me.id) >= 0; - var head = me.role === 'audience' ? 'Runden er slut' : spy ? (r.spy_won ? 'Du slap væk!' : 'Du blev fanget!') : (r.spy_won ? 'Spionen vandt' : 'I fangede spionen!'); + var spy = (r.spies || []).indexOf(me.id) >= 0, two = (r.spies || []).length > 1; + var guessed = !!(r.caught && r.guess && r.guess.correct); + var head = me.role === 'audience' ? 'Runden er slut' + : r.spies_left ? 'Spionen forlod spillet' + : spy ? (r.caught !== me.id ? 'Du slap væk!' : guessed ? 'Du gættede ordet!' : 'Du blev fanget!') /* om netop dig */ + : two && r.caught && !guessed ? 'I fangede den ene spion' : r.spy_won ? (two ? 'Spionerne vandt' : 'Spionen vandt') : 'I fangede spionen!'; return themeTag(state) + big(head, 'Ordet var ' + esc(r.word || '') + '' + (mine ? '
+' + WPP.fmt(mine) + ' point' : ''), 'res', 'pop'); }; function playStale(state, u) { return false; } @@ -179,7 +183,7 @@ '' + c.votes + '' + (aud[c.player_id] ? '+' + aud[c.player_id] + ' publikum' : '') + ''; }).join(''); var shown = verdictRevealed(state); - var stamp = !v.accused ? '
Ingen anklaget: spionen slipper!
' + var stamp = !v.accused ? '
Ingen anklaget: ' + (state.spies === 2 ? 'spionerne slipper!' : 'spionen slipper!') + '
' : !shown ? '
Er det spionen?
' : '
' + (v.accused_is_spy ? 'SPION!' : 'Uskyldig!') + '
'; @@ -202,8 +206,9 @@ return '
  • ' + chipOf(players, id) + '+' + WPP.fmt(r.deltas[id]) + '
  • '; }).join(''); var two = (r.spies || []).length > 1; - var head = two ? (r.caught && !r.spy_won ? 'En spion er fanget, den anden slap!' : r.caught ? 'Spionen gættede ordet!' : 'Spionerne slap væk!') - : r.spy_won ? 'Spionen vandt runden!' : 'Spionen er fanget!'; + var head = r.spies_left ? 'Spionen forlod missionen' + : two ? (r.caught && !r.spy_won ? 'En spion er fanget, den anden slap!' : r.caught ? 'Spionen gættede ordet!' : 'Spionerne slap væk!') + : r.spy_won ? 'Spionen vandt runden!' : 'Spionen er fanget!'; return '

    ' + head + '

    ' + '

    ' + ((r.spies || []).length > 1 ? 'Spionerne var' : 'Spionen var') + '

    ' + spies + '
    ' + '

    Ordet var

    ' + esc(r.word || '') + '
    ' + g + '
    ' + diff --git a/spionen/engine.py b/spionen/engine.py index a79fb2a..5f55d88 100644 --- a/spionen/engine.py +++ b/spionen/engine.py @@ -473,7 +473,8 @@ class Game: counts = self._tally(self.votes) self.result = {"spies": list(self.spies), "spy_names": [self.spy_names.get(s, "?") for s in self.spies], "word": self.word, "caught": caught, "guess": self.guess, - "spy_won": caught is None or guessed, "deltas": deltas} + "spy_won": caught is None or guessed, "deltas": deltas, + "spies_left": not any(s in self.players for s in self.spies)} self.phase = "result" self.deadline = now + RESULT_SECONDS self._emit("result", spies=[self.spy_names.get(s, "") for s in self.spies], word=self.word,