Feat: add game over

This commit is contained in:
Grail Finder
2025-05-11 10:03:18 +03:00
parent becd3aca02
commit cf5643227b
5 changed files with 29 additions and 10 deletions

View File

@ -9,7 +9,11 @@
<button hx-get="/start-game" hx-target="#room" class="bg-amber-100 text-black px-4 py-2 rounded">Start Game</button>
{{end}}
</p>
{{if .Room.IsOver}}
<p>GAME OVER; team <span class="text-{{.Room.TeamWon}}-500">{{.Room.TeamWon}}</span> won! 🧚</p>
{{else}}
<p>Turn of the <span class="text-{{.Room.TeamTurn}}-500">{{.Room.TeamTurn}}</span> team</p>
{{end}}
<p>
{{if eq .State.Team ""}}
join the team!

View File

@ -51,8 +51,6 @@ func HandleShowColor(w http.ResponseWriter, r *http.Request) {
abortWithError(w, err.Error())
return
}
log.Debug("got state", "state", fi)
// TODO: update room score
color, exists := roundWords[word]
log.Debug("got show-color request", "word", word, "color", color)
if !exists {
@ -75,14 +73,29 @@ func HandleShowColor(w http.ResponseWriter, r *http.Request) {
}
fi.Room.ActionHistory = append(fi.Room.ActionHistory, action)
// if opened card is of color of opp team, change turn
oppositeColor := fi.Room.GetOppositeTeamColor()
switch color {
case "black":
// game over
fi.Room.IsRunning = false
fi.Room.IsOver = true
case "white", fi.Room.GetOppositeTeamColor():
fi.Room.TeamWon = oppositeColor
case "white", oppositeColor:
// end turn
fi.Room.TeamTurn = fi.Room.GetOppositeTeamColor()
fi.Room.TeamTurn = oppositeColor
}
// check if no cards left => game over
if fi.Room.BlueCounter == 0 {
// blue won
fi.Room.IsRunning = false
fi.Room.IsOver = true
fi.Room.TeamWon = "blue"
}
if fi.Room.RedCounter == 0 {
// red won
fi.Room.IsRunning = false
fi.Room.IsOver = true
fi.Room.TeamWon = "red"
}
if err := saveFullInfo(fi); err != nil {
abortWithError(w, err.Error())

View File

@ -192,11 +192,12 @@ func HandleStartGame(w http.ResponseWriter, r *http.Request) {
fi.Room.IsOver = false
fi.Room.TeamTurn = "blue"
fi.Room.LoadTestCards()
fi.Room.UpdateCounter()
fi.Room.TeamWon = ""
if err := saveFullInfo(fi); err != nil {
abortWithError(w, err.Error())
return
}
fi.Room.UpdateCounter()
// reveal all cards
if fi.State.Role == "mime" {
fi.Room.RevealAllCards()

View File

@ -70,7 +70,8 @@ type Room struct {
Language string `json:"language" example:"en" form:"language"`
RoundTime int32 `json:"round_time"`
// ProgressPct uint32 `json:"progress_pct"`
IsOver bool
IsOver bool
TeamWon string // blue | red
}
func (r *Room) GetOppositeTeamColor() string {

View File

@ -1,10 +1,7 @@
### feats
- game state (running/not);
- start game: btn, endpoint;
- mime: clue + number;
- game log: what clues were given, who opened what cards;
- end game: who won.
- end game: two reasons (black word; all words);
- ability to leave room;
#### sse points
- clue sse update;
@ -19,3 +16,6 @@
### issues
- after the game started (isrunning) players should be able join guessers, but not switch team, or join as a mime;
- do not let wrong team press buttons;
- mime can give clues out of turn;
- guesser can guess the word before the clue;
- cleanup backlog after new game is started;