Documentation
¶
Overview ¶
Package game defines the plugin interface for puzzle games.
Index ¶
- Constants
- Variables
- func BorderChar(ch string, colors GridBorderColors, solved, highlight bool) string
- func ConflictBG() color.Color
- func ConflictFG() color.Color
- func CursorBG() color.Color
- func CursorFG() color.Color
- func CursorSolvedStyle() lipgloss.Style
- func CursorStyle() lipgloss.Style
- func DebugHeader(title string, rows [][2]string) string
- func DebugTable(heading string, headers []string, rows [][]string) string
- func HBorderRow(w, cursorX, cellWidth int, left, right string, colors GridBorderColors, ...) string
- func Register(name string, fn func([]byte) (Gamer, error))
- func SolvedFG() color.Color
- func StatusBarStyle() lipgloss.Style
- func TitleBarView(gameName, modeName string, solved bool) string
- type BaseMode
- type Category
- type Cursor
- type CursorKeyMap
- type Gamer
- type GridBorderColors
- type HelpToggleMsg
- type Mode
- type SeededSpawner
- type SpawnCompleteMsg
- type Spawner
Constants ¶
const ( CursorLeft = "\u25b8" // ▸ CursorRight = "\u25c2" // ◂ )
Bracket markers for cursor identification. These are prepended/appended to cell content so the cursor is identifiable independent of BG contrast.
Variables ¶
var DefaultCursorKeyMap = CursorKeyMap{ Up: key.NewBinding( key.WithKeys("k", "up", "w"), key.WithHelp("↑/w/k", "Up"), ), Down: key.NewBinding( key.WithKeys("j", "down", "s"), key.WithHelp("↓/s/j", "Down"), ), Left: key.NewBinding( key.WithKeys("h", "left", "a"), key.WithHelp("←/a/h", "Left"), ), Right: key.NewBinding( key.WithKeys("l", "right", "d"), key.WithHelp("→/d/l", "Right"), ), }
DefaultCursorKeyMap provides the standard cursor movement bindings.
var Registry = map[string]func([]byte) (Gamer, error){}
Registry maps game type names to their import functions.
Functions ¶
func BorderChar ¶ added in v1.4.0
func BorderChar(ch string, colors GridBorderColors, solved, highlight bool) string
BorderChar renders a single border character with optional crosshair highlighting.
func ConflictBG ¶ added in v1.4.0
func ConflictFG ¶ added in v1.4.0
func CursorSolvedStyle ¶ added in v1.3.0
CursorSolvedStyle highlights the cursor position on a solved grid.
func CursorStyle ¶ added in v1.4.0
CursorStyle highlights the cursor position with an accent background.
func DebugHeader ¶
DebugHeader returns the markdown heading and property table header for debug info. rows is a list of [key, value] pairs for the "Game State" table.
func DebugTable ¶
DebugTable returns a markdown table section with a heading and arbitrary columns. headers is the column names, rows is a list of row values.
func HBorderRow ¶ added in v1.4.0
func HBorderRow(w, cursorX, cellWidth int, left, right string, colors GridBorderColors, solved bool) string
HBorderRow builds a horizontal border row (top or bottom) with per-column crosshair highlighting. cellWidth is the visual width of each cell.
func StatusBarStyle ¶ added in v1.4.0
StatusBarStyle returns the shared style for the status/help bar below each puzzle grid.
func TitleBarView ¶
TitleBarView renders a title bar with the game name, mode name, and optional solved badge.
Types ¶
type BaseMode ¶
type BaseMode struct {
// contains filtered or unexported fields
}
BaseMode provides the common title/description fields and the three Mode-interface methods so that concrete mode structs can embed it instead of duplicating boilerplate.
func NewBaseMode ¶
func (BaseMode) Description ¶
func (BaseMode) FilterValue ¶
type Category ¶
type Category struct {
Name string
Desc string
Modes []list.Item
Help string // embedded help.md content rendered in "How to Play"
}
Category groups related game modes under a heading in the menu.
func (Category) Description ¶
func (Category) FilterValue ¶
type Cursor ¶
type Cursor struct {
X, Y int
}
func (*Cursor) Move ¶
func (c *Cursor) Move(keys CursorKeyMap, msg tea.KeyPressMsg, maxX, maxY int) bool
Move updates the cursor position based on the key message and bounds. Returns true if the cursor moved.
type CursorKeyMap ¶
CursorKeyMap defines the shared cursor movement key bindings.
type Gamer ¶
type Gamer interface {
GetDebugInfo() string
GetFullHelp() [][]key.Binding
GetSave() ([]byte, error)
IsSolved() bool
Reset() Gamer
SetTitle(string) Gamer
Init() tea.Cmd
View() string
Update(msg tea.Msg) (Gamer, tea.Cmd)
}
Gamer is the interface that an active game instance must implement.
type GridBorderColors ¶ added in v1.4.0
type GridBorderColors struct {
BorderFG color.Color
BackgroundBG color.Color
CrosshairBG color.Color
SolvedBorderFG color.Color
SolvedBG color.Color
}
GridBorderColors holds the color configuration for a grid border with crosshair and solved-state highlighting.
func DefaultBorderColors ¶ added in v1.5.0
func DefaultBorderColors() GridBorderColors
DefaultBorderColors returns border colors from the active theme.
type HelpToggleMsg ¶
type HelpToggleMsg struct{ Show bool }
HelpToggleMsg is sent from the root model to games when the user toggles the full help display with Ctrl+H.
type SeededSpawner ¶ added in v1.3.0
SeededSpawner creates a new game instance using a deterministic RNG. This enables reproducible puzzle generation for daily puzzles.
type SpawnCompleteMsg ¶ added in v1.3.0
SpawnCompleteMsg is sent when an async Spawn() call finishes.