rules

package module
v1.0.16 Latest Latest
Warning

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

Go to latest
Published: Dec 11, 2020 License: AGPL-3.0 Imports: 3 Imported by: 14

README

BattlesnakeOfficial/rules

codecov

Battlesnake rules and game logic, implemented as a Go module. Issues and contributions welcome!

FAQ

How is this different from the old Battlesnake engine?

The old game engine was re-written in early 2020 to handle a higher volume of concurrent games. As a result, the majority of engine code was concerned with scalable game execution and not the actual game rules. As part of that refactor we moved the game logic implementation into a separate go module that gets compiled into the production engine.

This provides two benefits: it makes it much simpler/easier to build new game modes, and it allows the community to get more involved in game development (without the maintenance overhead of the entire game engine).

Can I run games locally?

This was functionality that an older version of the game logic provided, including a release binary. We'd like to recreate that behaviour and include it in this repo, but for now it doesn't exist. See Issue #20 for more info.

The Y-Axis appears to be implemented incorrectly?

This is because the game rules implement an inverted Y-Axis. Older versions of the Battlesnake API operated this way, and several highly competitive Battlesnakes still rely on this behaviour and we'd still like to upport them. The current game engine accounts for this by translating the Y-Axis (or not) based on which version of the API each Battlesnake implements. More info here and here.

In the future we might switch this to make the rules easier to develop? But until we drop support for the older API version it doesn't make sense to make that change.

CLI Build Instructions

From the root folder of the project, run:

go install github.com/BattlesnakeOfficial/rules/cli/battlesnake

This will create the battlesnake command, that you can use. It currently has one command: play.

Use the CLI to configure and play a game of Battlesnake against 
multiple snakes, with multiple rulesets.

Usage:
  battlesnake play [flags]

Flags:
  -g, --gametype string     Type of Game Rules (default "standard")
  -H, --height int32        Height of Board (default 11)
  -h, --help                help for play
  -n, --name stringArray    Name of Snake
  -s, --sequential          Use Sequential Processing
  -S, --squad stringArray   Squad of Snake
  -t, --timeout int32       Request Timeout (default 500)
  -u, --url stringArray     URL of Snake
  -v, --viewmap             View the Map Each Turn
  -W, --width int32         Width of Board (default 11)

Global Flags:
      --config string   config file (default is $HOME/.battlesnake.yaml)

For more details, see the CLI-Specific README

Documentation

Index

Constants

View Source
const (
	MoveUp    = "up"
	MoveDown  = "down"
	MoveRight = "right"
	MoveLeft  = "left"
)
View Source
const (
	BoardSizeSmall  = 7
	BoardSizeMedium = 11
	BoardSizeLarge  = 19

	SnakeMaxHealth = 100
	SnakeStartSize = 3

	// bvanvugt - TODO: Just return formatted strings instead of codes?
	NotEliminated                   = ""
	EliminatedByCollision           = "snake-collision"
	EliminatedBySelfCollision       = "snake-self-collision"
	EliminatedByOutOfHealth         = "out-of-health"
	EliminatedByHeadToHeadCollision = "head-collision"
	EliminatedByOutOfBounds         = "wall-collision"
)
View Source
const EliminatedBySquad = "squad-eliminated"

Variables

This section is empty.

Functions

This section is empty.

Types

type BoardState

type BoardState struct {
	Height int32
	Width  int32
	Food   []Point
	Snakes []Snake
}

type MazeRuleset added in v1.0.16

type MazeRuleset struct {
	StandardRuleset
}

func (*MazeRuleset) CreateInitialBoardState added in v1.0.16

func (r *MazeRuleset) CreateInitialBoardState(width int32, height int32, snakeIDs []string) (*BoardState, error)

func (*MazeRuleset) CreateNextBoardState added in v1.0.16

func (r *MazeRuleset) CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error)

type Point

type Point struct {
	X int32
	Y int32
}

type RoyaleRuleset added in v1.0.9

type RoyaleRuleset struct {
	StandardRuleset

	Seed int64

	Turn              int32
	ShrinkEveryNTurns int32
	DamagePerTurn     int32

	// Output
	OutOfBounds []Point
}

func (*RoyaleRuleset) CreateNextBoardState added in v1.0.9

func (r *RoyaleRuleset) CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error)

type Ruleset

type Ruleset interface {
	CreateInitialBoardState(width int32, height int32, snakeIDs []string) (*BoardState, error)
	CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error)
	IsGameOver(state *BoardState) (bool, error)
}

type Snake

type Snake struct {
	ID              string
	Body            []Point
	Health          int32
	EliminatedCause string
	EliminatedBy    string
}

type SnakeMove

type SnakeMove struct {
	ID   string
	Move string
}

type SoloRuleset added in v1.0.4

type SoloRuleset struct {
	StandardRuleset
}

func (*SoloRuleset) IsGameOver added in v1.0.4

func (r *SoloRuleset) IsGameOver(b *BoardState) (bool, error)

type SquadRuleset added in v1.0.8

type SquadRuleset struct {
	StandardRuleset

	SquadMap map[string]string

	// These are intentionally designed so that they default to a standard game.
	AllowBodyCollisions bool
	SharedElimination   bool
	SharedHealth        bool
	SharedLength        bool
}

func (*SquadRuleset) CreateNextBoardState added in v1.0.8

func (r *SquadRuleset) CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error)

func (*SquadRuleset) IsGameOver added in v1.0.8

func (r *SquadRuleset) IsGameOver(b *BoardState) (bool, error)

type StandardRuleset

type StandardRuleset struct {
	FoodSpawnChance int32 // [0, 100]
	MinimumFood     int32
}

func (*StandardRuleset) CreateInitialBoardState

func (r *StandardRuleset) CreateInitialBoardState(width int32, height int32, snakeIDs []string) (*BoardState, error)

func (*StandardRuleset) CreateNextBoardState added in v1.0.4

func (r *StandardRuleset) CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error)

func (*StandardRuleset) IsGameOver added in v1.0.4

func (r *StandardRuleset) IsGameOver(b *BoardState) (bool, error)

Directories

Path Synopsis
cli
battlesnake command

Jump to

Keyboard shortcuts

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