Feat: word loader
This commit is contained in:
5909
assets/words/en_nouns.txt
Normal file
5909
assets/words/en_nouns.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -4,9 +4,11 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"golias/broker"
|
"golias/broker"
|
||||||
"golias/models"
|
"golias/models"
|
||||||
"golias/utils"
|
"golias/utils"
|
||||||
|
"golias/wordloader"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -248,3 +250,14 @@ func notify(event, msg string) {
|
|||||||
Payload: msg,
|
Payload: msg,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadCards(room *models.Room) {
|
||||||
|
wl := wordloader.InitDefaultLoader("assets/words/en_nouns.txt")
|
||||||
|
cards, err := wl.Load()
|
||||||
|
if err != nil {
|
||||||
|
// no logger
|
||||||
|
fmt.Println("failed to load cards", "error", err)
|
||||||
|
}
|
||||||
|
room.Cards = cards
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -176,7 +176,8 @@ func HandleStartGame(w http.ResponseWriter, r *http.Request) {
|
|||||||
fi.Room.IsRunning = true
|
fi.Room.IsRunning = true
|
||||||
fi.Room.IsOver = false
|
fi.Room.IsOver = false
|
||||||
fi.Room.TeamTurn = "blue"
|
fi.Room.TeamTurn = "blue"
|
||||||
fi.Room.LoadTestCards()
|
// fi.Room.LoadTestCards()
|
||||||
|
loadCards(fi.Room)
|
||||||
fi.Room.UpdateCounter()
|
fi.Room.UpdateCounter()
|
||||||
fi.Room.TeamWon = ""
|
fi.Room.TeamWon = ""
|
||||||
if err := saveFullInfo(fi); err != nil {
|
if err := saveFullInfo(fi); err != nil {
|
||||||
|
@ -103,36 +103,45 @@ func (r *Room) UpdateCounter() {
|
|||||||
r.BlueCounter = blueCounter
|
r.BlueCounter = blueCounter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Room) LoadTestCards() {
|
// func (r *Room) LoadTestCards() {
|
||||||
cards := []WordCard{
|
// // TODO: pass room settings
|
||||||
{Word: "hamster", Color: "blue"},
|
// // TODO: map language to path
|
||||||
{Word: "child", Color: "red"},
|
// wl := wordloader.InitDefaultLoader("assets/words/en_nouns.txt")
|
||||||
{Word: "wheel", Color: "white"},
|
// cards, err := wl.Load()
|
||||||
{Word: "condition", Color: "black"},
|
// if err != nil {
|
||||||
{Word: "test", Color: "white"},
|
// // no logger
|
||||||
{Word: "ball", Color: "blue"},
|
// fmt.Println("failed to load cards", "error", err)
|
||||||
{Word: "violin", Color: "red"},
|
// }
|
||||||
{Word: "rat", Color: "white"},
|
// r.Cards = cards
|
||||||
{Word: "perplexity", Color: "blue"},
|
// // cards := []WordCard{
|
||||||
{Word: "notion", Color: "red"},
|
// // {Word: "hamster", Color: "blue"},
|
||||||
{Word: "guitar", Color: "blue"},
|
// // {Word: "child", Color: "red"},
|
||||||
{Word: "ocean", Color: "blue"},
|
// // {Word: "wheel", Color: "white"},
|
||||||
{Word: "moon", Color: "blue"},
|
// // {Word: "condition", Color: "black"},
|
||||||
{Word: "coffee", Color: "blue"},
|
// // {Word: "test", Color: "white"},
|
||||||
{Word: "mountain", Color: "blue"},
|
// // {Word: "ball", Color: "blue"},
|
||||||
{Word: "book", Color: "blue"},
|
// // {Word: "violin", Color: "red"},
|
||||||
{Word: "camera", Color: "blue"},
|
// // {Word: "rat", Color: "white"},
|
||||||
{Word: "apple", Color: "red"},
|
// // {Word: "perplexity", Color: "blue"},
|
||||||
{Word: "fire", Color: "red"},
|
// // {Word: "notion", Color: "red"},
|
||||||
{Word: "rose", Color: "red"},
|
// // {Word: "guitar", Color: "blue"},
|
||||||
{Word: "sun", Color: "red"},
|
// // {Word: "ocean", Color: "blue"},
|
||||||
{Word: "cherry", Color: "red"},
|
// // {Word: "moon", Color: "blue"},
|
||||||
{Word: "heart", Color: "red"},
|
// // {Word: "coffee", Color: "blue"},
|
||||||
{Word: "tomato", Color: "red"},
|
// // {Word: "mountain", Color: "blue"},
|
||||||
{Word: "cloud", Color: "white"},
|
// // {Word: "book", Color: "blue"},
|
||||||
}
|
// // {Word: "camera", Color: "blue"},
|
||||||
r.Cards = cards
|
// // {Word: "apple", Color: "red"},
|
||||||
}
|
// // {Word: "fire", Color: "red"},
|
||||||
|
// // {Word: "rose", Color: "red"},
|
||||||
|
// // {Word: "sun", Color: "red"},
|
||||||
|
// // {Word: "cherry", Color: "red"},
|
||||||
|
// // {Word: "heart", Color: "red"},
|
||||||
|
// // {Word: "tomato", Color: "red"},
|
||||||
|
// // {Word: "cloud", Color: "white"},
|
||||||
|
// // }
|
||||||
|
// // r.Cards = cards
|
||||||
|
// }
|
||||||
|
|
||||||
func (r *Room) ChangeTurn() {
|
func (r *Room) ChangeTurn() {
|
||||||
switch r.TeamTurn {
|
switch r.TeamTurn {
|
||||||
|
80
wordloader/wordloader.go
Normal file
80
wordloader/wordloader.go
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package wordloader
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golias/models"
|
||||||
|
"math/rand/v2"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Loader struct {
|
||||||
|
FilePath string
|
||||||
|
BlackCount uint8
|
||||||
|
WhiteCount uint8
|
||||||
|
RedCount uint8
|
||||||
|
BlueCount uint8
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitDefaultLoader(fpath string) *Loader {
|
||||||
|
return &Loader{
|
||||||
|
FilePath: fpath,
|
||||||
|
BlackCount: 1,
|
||||||
|
WhiteCount: 7,
|
||||||
|
RedCount: 8,
|
||||||
|
BlueCount: 9,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Loader) WholeCount() uint8 {
|
||||||
|
return l.BlackCount + l.WhiteCount + l.RedCount + l.BlueCount
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Loader) Load() ([]models.WordCard, error) {
|
||||||
|
data, err := os.ReadFile(l.FilePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
lines := strings.Split(string(data), "\n")
|
||||||
|
rand.Shuffle(len(lines), func(i, j int) {
|
||||||
|
lines[i], lines[j] = lines[j], lines[i]
|
||||||
|
})
|
||||||
|
words := lines[:int(l.WholeCount())]
|
||||||
|
cards := make([]models.WordCard, l.WholeCount())
|
||||||
|
for i, word := range words {
|
||||||
|
if l.BlackCount > 0 {
|
||||||
|
cards[i] = models.WordCard{
|
||||||
|
Word: word,
|
||||||
|
Color: "black",
|
||||||
|
}
|
||||||
|
l.BlackCount--
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if l.WhiteCount > 0 {
|
||||||
|
cards[i] = models.WordCard{
|
||||||
|
Word: word,
|
||||||
|
Color: "white",
|
||||||
|
}
|
||||||
|
l.WhiteCount--
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if l.RedCount > 0 {
|
||||||
|
cards[i] = models.WordCard{
|
||||||
|
Word: word,
|
||||||
|
Color: "red",
|
||||||
|
}
|
||||||
|
l.RedCount--
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if l.BlueCount > 0 {
|
||||||
|
cards[i] = models.WordCard{
|
||||||
|
Word: word,
|
||||||
|
Color: "blue",
|
||||||
|
}
|
||||||
|
l.BlueCount--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rand.Shuffle(len(cards), func(i, j int) {
|
||||||
|
cards[i], cards[j] = cards[j], cards[i]
|
||||||
|
})
|
||||||
|
return cards, nil
|
||||||
|
}
|
Reference in New Issue
Block a user