Feat: card counter

This commit is contained in:
Grail Finder
2025-05-10 14:35:24 +03:00
parent 35e215e26f
commit 321b79b258
6 changed files with 51 additions and 0 deletions

View File

@ -0,0 +1,6 @@
{{define "cardcounter"}}
<div class="flex justify-center">
<p>Blue cards left: {{.BlueCounter}}</p>
<p>Red cards left: {{.RedCounter}}</p>
</div>
{{end}}

View File

@ -19,6 +19,9 @@
</p>
</div>
<hr />
{{if .Room.IsRunning}}
{{template "cardcounter" .Room}}
{{end}}
<div class="flex justify-center">
<!-- Left Panel -->
{{template "teamlist" .Room.BlueTeam}}

View File

@ -65,6 +65,17 @@ func HandleShowColor(w http.ResponseWriter, r *http.Request) {
Revealed: true,
}
fi.Room.RevealSpecificWord(word)
fi.Room.UpdateCounter()
// if opened card is of color of opp team, change turn
switch color {
case "black":
// game over
fi.Room.IsRunning = false
fi.Room.IsOver = true
case "white", fi.Room.GetOppositeTeamColor():
// end turn
fi.Room.TeamTurn = fi.Room.GetOppositeTeamColor()
}
if err := saveFullInfo(fi); err != nil {
abortWithError(w, err.Error())
return

View File

@ -196,6 +196,7 @@ func HandleStartGame(w http.ResponseWriter, r *http.Request) {
abortWithError(w, err.Error())
return
}
fi.Room.UpdateCounter()
// reveal all cards
if fi.State.Role == "mime" {
fi.Room.RevealAllCards()

View File

@ -70,6 +70,8 @@ func HandleHome(w http.ResponseWriter, r *http.Request) {
if fi != nil && fi.Room != nil && fi.State != nil {
if fi.State.Role == "mime" {
fi.Room.RevealAllCards()
} else {
fi.Room.UpdateCounter()
}
}
if fi != nil && fi.Room == nil {

View File

@ -62,6 +62,34 @@ type Room struct {
IsOver bool
}
func (r *Room) GetOppositeTeamColor() string {
switch r.TeamTurn {
case "red":
return "blue"
case "blue":
return "red"
}
return ""
}
func (r *Room) UpdateCounter() {
redCounter := uint8(0)
blueCounter := uint8(0)
for _, card := range r.Cards {
if card.Revealed {
continue
}
switch card.Color {
case WordColorRed:
redCounter++
case WordColorBlue:
blueCounter++
}
}
r.RedCounter = redCounter
r.BlueCounter = blueCounter
}
func (r *Room) LoadTestCards() {
cards := []WordCard{
{Word: "hamster", Color: "blue"},