implemented functionality to guess a letter

This commit is contained in:
Hazel Noack 2025-06-30 12:44:06 +02:00
parent 9ea2158def
commit 748c2de536

View File

@ -3,6 +3,8 @@ package game
import (
"crypto/ed25519"
"encoding/base64"
"errors"
"strings"
petname "github.com/dustinkirkland/golang-petname"
)
@ -16,17 +18,28 @@ type Session struct {
Name string
Users []User
Phrase []string
HiddenPhrase []string
phrase []string
AskedLetters []string
DiscoveredPhrase []string
Mistakes int
userIndex int
CurrentUser *User
}
func NewSession(phrase string) Session {
sessionName := petname.Generate(3, "-")
s := Session{
id: lastSessionId,
Name: sessionName,
Users: []User{},
id: lastSessionId,
Name: sessionName,
Users: []User{},
phrase: []string{phrase},
AskedLetters: []string{},
DiscoveredPhrase: make([]string, len(phrase)),
Mistakes: 0,
userIndex: 0,
CurrentUser: nil,
}
sessionStorage = append(sessionStorage, s)
@ -42,6 +55,10 @@ func GetSession(name string) *Session {
func (s *Session) AddUser(user User) {
s.Users = append(s.Users, user)
if s.CurrentUser == nil {
s.CurrentUser = &s.Users[s.userIndex]
}
}
func (s Session) VerifySignature(signature string, message []byte) *User {
@ -55,3 +72,33 @@ func (s Session) VerifySignature(signature string, message []byte) *User {
return nil
}
func (s *Session) GuessLetter(letter string) (*Session, error) {
letter = strings.ToLower(letter)
if len(letter) != 1 {
return s, errors.New("the letter needs to have a length of one")
}
for _, asked := range s.AskedLetters {
if letter == asked {
return s, errors.New("the letter " + letter + " was already asked")
}
}
s.AskedLetters = append(s.AskedLetters, letter)
found := false
for i, l := range s.phrase {
if l == letter {
found = true
s.DiscoveredPhrase[i] = s.phrase[i]
}
}
if !found {
s.Mistakes++
}
s.userIndex = (s.userIndex + 1) % len(s.Users)
s.CurrentUser = &s.Users[s.userIndex]
return s, nil
}