rules

package module
v1.0.26 Latest Latest
Warning

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

Go to latest
Published: Jan 31, 2022 License: AGPL-3.0 Imports: 3 Imported by: 14

README

BattlesnakeOfficial/rules

codecov

Battlesnake rules and game logic, implemented as a Go module. This code is used in production at play.battlesnake.com. Issues and contributions welcome!

CLI for Running Battlesnake Games Locally

This repo provides a simple CLI tool to run games locally against your dev environment.

Installation

Download precompiled binaries here:
https://github.com/BattlesnakeOfficial/rules/releases

Install as a Go package. Requires Go 1.17 or higher. [Download]

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

Compile from source. Also requires Go 1.17 or higher.

git clone git@github.com:BattlesnakeOfficial/rules.git
cd rules
go build -o battlesnake ./cli/battlesnake/main.go
Usage

Example command to run a game locally:

battlesnake play -W 11 -H 11 --name <SNAKE_NAME> --url <SNAKE_URL> -g solo -v

For more details, see the CLI README.

FAQ

Can I run games locally?

Yes! See the included CLI.

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 part of that rebuild we moved the game logic 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).

Feedback
  • Do you have an issue or suggestions for this repository? Head over to our Feedback Repository today and let us know!

Documentation

Index

Constants

View Source
const (
	MoveUp    = "up"
	MoveDown  = "down"
	MoveRight = "right"
	MoveLeft  = "left"

	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"

	// TODO - Error consts
	ErrorTooManySnakes   = RulesetError("too many snakes for fixed start positions")
	ErrorNoRoomForSnake  = RulesetError("not enough space to place snake")
	ErrorNoRoomForFood   = RulesetError("not enough space to place food")
	ErrorNoMoveFound     = RulesetError("move not provided for snake")
	ErrorZeroLengthSnake = RulesetError("snake is length zero")
)
View Source
const EliminatedBySquad = "squad-eliminated"

Variables

This section is empty.

Functions

func PlaceFoodAutomatically added in v1.0.21

func PlaceFoodAutomatically(b *BoardState) error

PlaceFoodAutomatically initializes the array of food based on the size of the board and the number of snakes.

func PlaceFoodFixed added in v1.0.21

func PlaceFoodFixed(b *BoardState) error

func PlaceFoodRandomly added in v1.0.21

func PlaceFoodRandomly(b *BoardState, n int32) error

PlaceFoodRandomly adds up to n new food to the board in random unoccupied squares

func PlaceSnake added in v1.0.21

func PlaceSnake(b *BoardState, snakeID string, body []Point) error

PlaceSnake adds a snake to the board with the given ID and body coordinates.

func PlaceSnakesAutomatically added in v1.0.21

func PlaceSnakesAutomatically(b *BoardState, snakeIDs []string) error

PlaceSnakesAutomatically initializes the array of snakes based on the provided snake IDs and the size of the board.

func PlaceSnakesFixed added in v1.0.21

func PlaceSnakesFixed(b *BoardState, snakeIDs []string) error

func PlaceSnakesRandomly added in v1.0.21

func PlaceSnakesRandomly(b *BoardState, snakeIDs []string) error

Types

type BoardState

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

func CreateDefaultBoardState added in v1.0.21

func CreateDefaultBoardState(width int32, height int32, snakeIDs []string) (*BoardState, error)

CreateDefaultBoardState is a convenience function for fully initializing a "default" board state with snakes and food. In a real game, the engine may generate the board without calling this function, or customize the results based on game-specific settings.

func NewBoardState added in v1.0.21

func NewBoardState(width, height int32) *BoardState

NewBoardState returns an empty but fully initialized BoardState

func (*BoardState) Clone added in v1.0.21

func (prevState *BoardState) Clone() *BoardState

Clone returns a deep copy of prevState that can be safely modified inside Ruleset.CreateNextBoardState

type ConstrictorRuleset added in v1.0.17

type ConstrictorRuleset struct {
	StandardRuleset
}

func (*ConstrictorRuleset) CreateNextBoardState added in v1.0.17

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

func (*ConstrictorRuleset) ModifyInitialBoardState added in v1.0.21

func (r *ConstrictorRuleset) ModifyInitialBoardState(initialBoardState *BoardState) (*BoardState, error)

func (*ConstrictorRuleset) Name added in v1.0.26

func (r *ConstrictorRuleset) Name() string

type Point

type Point struct {
	X int32
	Y int32
}

type RoyaleRuleset added in v1.0.9

type RoyaleRuleset struct {
	StandardRuleset

	Seed int64

	ShrinkEveryNTurns int32
}

func (*RoyaleRuleset) CreateNextBoardState added in v1.0.9

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

func (*RoyaleRuleset) Name added in v1.0.18

func (r *RoyaleRuleset) Name() string

type Ruleset

type Ruleset interface {
	Name() string
	ModifyInitialBoardState(initialState *BoardState) (*BoardState, error)
	CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error)
	IsGameOver(state *BoardState) (bool, error)
}

type RulesetError added in v1.0.17

type RulesetError string

func (RulesetError) Error added in v1.0.17

func (err RulesetError) Error() string

type Snake

type Snake struct {
	ID               string
	Body             []Point
	Health           int32
	EliminatedCause  string
	EliminatedOnTurn int32
	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)

func (*SoloRuleset) Name added in v1.0.18

func (r *SoloRuleset) Name() string

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)

func (*SquadRuleset) Name added in v1.0.18

func (r *SquadRuleset) Name() string

type StandardRuleset

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

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)

func (*StandardRuleset) ModifyInitialBoardState added in v1.0.21

func (r *StandardRuleset) ModifyInitialBoardState(initialState *BoardState) (*BoardState, error)

func (*StandardRuleset) Name added in v1.0.18

func (r *StandardRuleset) Name() string

type WrappedRuleset added in v1.0.21

type WrappedRuleset struct {
	StandardRuleset
}

func (*WrappedRuleset) CreateNextBoardState added in v1.0.21

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

func (*WrappedRuleset) Name added in v1.0.26

func (r *WrappedRuleset) Name() string

Directories

Path Synopsis
cli
battlesnake command

Jump to

Keyboard shortcuts

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