implemented functionality to guess a letter
This commit is contained in:
parent
9ea2158def
commit
748c2de536
@ -3,6 +3,8 @@ package game
|
|||||||
import (
|
import (
|
||||||
"crypto/ed25519"
|
"crypto/ed25519"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"errors"
|
||||||
|
"strings"
|
||||||
|
|
||||||
petname "github.com/dustinkirkland/golang-petname"
|
petname "github.com/dustinkirkland/golang-petname"
|
||||||
)
|
)
|
||||||
@ -16,17 +18,28 @@ type Session struct {
|
|||||||
Name string
|
Name string
|
||||||
Users []User
|
Users []User
|
||||||
|
|
||||||
Phrase []string
|
phrase []string
|
||||||
HiddenPhrase []string
|
AskedLetters []string
|
||||||
|
DiscoveredPhrase []string
|
||||||
|
Mistakes int
|
||||||
|
|
||||||
|
userIndex int
|
||||||
|
CurrentUser *User
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSession(phrase string) Session {
|
func NewSession(phrase string) Session {
|
||||||
sessionName := petname.Generate(3, "-")
|
sessionName := petname.Generate(3, "-")
|
||||||
|
|
||||||
s := Session{
|
s := Session{
|
||||||
id: lastSessionId,
|
id: lastSessionId,
|
||||||
Name: sessionName,
|
Name: sessionName,
|
||||||
Users: []User{},
|
Users: []User{},
|
||||||
|
phrase: []string{phrase},
|
||||||
|
AskedLetters: []string{},
|
||||||
|
DiscoveredPhrase: make([]string, len(phrase)),
|
||||||
|
Mistakes: 0,
|
||||||
|
userIndex: 0,
|
||||||
|
CurrentUser: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
sessionStorage = append(sessionStorage, s)
|
sessionStorage = append(sessionStorage, s)
|
||||||
@ -42,6 +55,10 @@ func GetSession(name string) *Session {
|
|||||||
|
|
||||||
func (s *Session) AddUser(user User) {
|
func (s *Session) AddUser(user User) {
|
||||||
s.Users = append(s.Users, 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 {
|
func (s Session) VerifySignature(signature string, message []byte) *User {
|
||||||
@ -55,3 +72,33 @@ func (s Session) VerifySignature(signature string, message []byte) *User {
|
|||||||
|
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user