game

package
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 10, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package game defines the plugin interface for puzzle games.

Index

Constants

This section is empty.

Variables

View Source
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.

View Source
var Registry = map[string]func([]byte) (Gamer, error){}

Registry maps game type names to their import functions.

Functions

func DebugHeader

func DebugHeader(title string, rows [][2]string) string

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

func DebugTable(heading string, headers []string, rows [][]string) string

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 Register

func Register(name string, fn func([]byte) (Gamer, error))

Register adds an import function for a game type to the registry.

func TitleBarView

func TitleBarView(gameName, modeName string, solved bool) string

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 NewBaseMode(title, description string) BaseMode

NewBaseMode creates a BaseMode with the given title and description.

func (BaseMode) Description

func (b BaseMode) Description() string

func (BaseMode) FilterValue

func (b BaseMode) FilterValue() string

func (BaseMode) Title

func (b BaseMode) Title() string

type Category

type Category struct {
	Name  string
	Desc  string
	Modes []list.Item
}

Category groups related game modes under a heading in the menu.

func (Category) Description

func (c Category) Description() string

func (Category) FilterValue

func (c Category) FilterValue() string

func (Category) Title

func (c Category) Title() string

type Cursor

type Cursor struct {
	X, Y int
}

Cursor represents a 2D grid cursor position.

func (*Cursor) Move

func (c *Cursor) Move(keys CursorKeyMap, msg tea.KeyMsg, maxX, maxY int) bool

Move updates the cursor position based on the key message and bounds. Returns true if the cursor moved.

type CursorKeyMap

type CursorKeyMap struct {
	Up    key.Binding
	Down  key.Binding
	Left  key.Binding
	Right key.Binding
}

CursorKeyMap defines the shared cursor movement key bindings.

type Gamer

type Gamer interface {
	GetDebugInfo() string
	GetFullHelp() [][]key.Binding

	GetSave() ([]byte, error)
	IsSolved() bool
	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 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 Mode

type Mode interface {
	Title() string
	Description() string
	FilterValue() string
}

Mode describes a game mode for menu display.

type Spawner

type Spawner interface {
	Spawn() (Gamer, error)
}

Spawner creates a new game instance. Implemented by concrete mode types but kept separate from Mode so that Category (which also satisfies Mode) does not need a Spawn method.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL