1package lightsout23import (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 Mode struct {16 game.BaseMode17 Width, Height int18}1920var (21 _ game.Mode = Mode{}22 _ game.Spawner = Mode{}23 _ game.SeededSpawner = Mode{}24)2526func NewMode(title, desc string, w, h int) Mode {27 return Mode{28 BaseMode: game.NewBaseMode(title, desc),29 Width: w,30 Height: h,31 }32}3334func (m Mode) Spawn() (game.Gamer, error) {35 return New(m.Width, m.Height)36}3738func (m Mode) SpawnSeeded(rng *rand.Rand) (game.Gamer, error) {39 return NewSeeded(m.Width, m.Height, rng)40}4142var Modes = []game.Mode{43 NewMode("Easy", "3x3 grid", 3, 3),44 NewMode("Medium", "5x5 grid", 5, 5),45 NewMode("Hard", "7x7 grid", 7, 7),46 NewMode("Extreme", "9x9 grid", 9, 9),47}4849var ModeDefinitions = gameentry.BuildModeDefs(Modes)5051var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{52 Name: "Lights Out",53 Description: "Turn the lights off.",54 Aliases: []string{"lights"},55 Modes: ModeDefinitions,56 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2),57})5859var Entry = gameentry.NewEntry(gameentry.EntrySpec{60 Definition: Definition,61 Help: HelpContent,62 Import: game.AdaptImport(ImportModel),63 Modes: Modes,64})