clone

fifteen puzzle games for the terminal, with daily puzzles, weekly ladders and xp, built on bubble tea

feat/app-decomposition
puzzletea / games / wordsearch / gamemode.go
gamemode.go 2.2K
1package wordsearch23import (4 _ "embed"5 "math/rand/v2"67 "github.com/FelineStateMachine/puzzletea/game"8 "github.com/FelineStateMachine/puzzletea/gameentry"9 "github.com/FelineStateMachine/puzzletea/puzzle"10)1112//go:embed help.md13var HelpContent string1415type WordSearchMode struct {16 game.BaseMode17 Width int18 Height int19 WordCount int20 MinWordLen int21 MaxWordLen int22 AllowedDirs []Direction23}2425var (26 _ game.Mode = WordSearchMode{}27 _ game.Spawner = WordSearchMode{}28 _ game.SeededSpawner = WordSearchMode{}29)3031func NewMode(title, description string, width, height, wordCount, minLen, maxLen int, allowedDirs []Direction) WordSearchMode {32 return WordSearchMode{33 BaseMode: game.NewBaseMode(title, description),34 Width: width,35 Height: height,36 WordCount: wordCount,37 MinWordLen: minLen,38 MaxWordLen: maxLen,39 AllowedDirs: allowedDirs,40 }41}4243func (w WordSearchMode) Spawn() (game.Gamer, error) {44 grid, words := GenerateWordSearch(w.Width, w.Height, w.WordCount, w.MinWordLen, w.MaxWordLen, w.AllowedDirs)45 return New(w, grid, words)46}4748func (w WordSearchMode) SpawnSeeded(rng *rand.Rand) (game.Gamer, error) {49 grid, words := GenerateWordSearchSeeded(w.Width, w.Height, w.WordCount, w.MinWordLen, w.MaxWordLen, w.AllowedDirs, rng)50 return New(w, grid, words)51}5253var Modes = []game.Mode{54 NewMode("Easy 10x10", "Find 6 words in a 10x10 grid.", 10, 10, 6, 3, 5, []Direction{Right, Down, DownRight}),55 NewMode("Medium 15x15", "Find 10 words in a 15x15 grid.", 15, 15, 10, 4, 7, []Direction{Right, Down, DownRight, DownLeft, Left, Up}),56 NewMode("Hard 20x20", "Find 15 words in a 20x20 grid.", 20, 20, 15, 5, 10, []Direction{Right, Down, DownRight, DownLeft, Left, Up, UpRight, UpLeft}),57}5859var ModeDefinitions = gameentry.BuildModeDefs(Modes)6061var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{62 Name: "Word Search",63 Description: "Find the hidden words in a letter grid.",64 Aliases: []string{"words", "wordsearch", "ws"},65 Modes: ModeDefinitions,66 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 0),67})6869var Entry = gameentry.NewEntry(gameentry.EntrySpec{70 Definition: Definition,71 Help: HelpContent,72 Import: game.AdaptImport(ImportModel),73 Modes: Modes,74 Print: PDFPrintAdapter,75})