Add wrapped_constrictor game mode and support for map tags (#102)

* add support for wrapped_constrictor game mode

* add tags to map metadata
This commit is contained in:
Rob O'Dwyer 2022-08-17 13:03:09 -07:00 committed by GitHub
parent ffeb401377
commit b1ddd2f4ca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 46 additions and 5 deletions

View file

@ -23,6 +23,7 @@ func (m ArcadeMazeMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 6,
BoardSizes: FixedSizes(Dimensions{19, 21}),
Tags: []string{TAG_FOOD_PLACEMENT, TAG_HAZARD_PLACEMENT, TAG_SNAKE_PLACEMENT},
}
}

View file

@ -23,6 +23,7 @@ func (m EmptyMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{},
}
}

View file

@ -4,6 +4,13 @@ import (
"github.com/BattlesnakeOfficial/rules"
)
const (
TAG_EXPERIMENTAL = "experimental" // experimental map, only available via CLI
TAG_SNAKE_PLACEMENT = "snake-placement" // map overrides default snake placement
TAG_HAZARD_PLACEMENT = "hazard-placement" // map places hazards
TAG_FOOD_PLACEMENT = "food-placement" // map overrides or adds to default food placement
)
type GameMap interface {
// Return a unique identifier for this map.
ID() string
@ -82,6 +89,8 @@ type Metadata struct {
// 2. multiple, fixed sizes (i.e. [11x11, 19x19, 25x25])
// 3. "unlimited" sizes (the board is not fixed and can scale to any reasonable size)
BoardSizes sizes
// Tags is a list of strings use to categorize the map.
Tags []string
}
// Editor is used by GameMap implementations to modify the board state.

View file

@ -33,6 +33,7 @@ func (m InnerBorderHazardsMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}
@ -73,6 +74,7 @@ func (m ConcentricRingsHazardsMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}
@ -114,6 +116,7 @@ func (m ColumnsHazardsMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}
@ -153,6 +156,7 @@ func (m SpiralHazardsMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}
@ -245,6 +249,7 @@ func (m ScatterFillMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}
@ -296,6 +301,7 @@ func (m DirectionalExpandingBoxMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}
@ -410,6 +416,7 @@ func (m ExpandingBoxMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}
@ -485,6 +492,7 @@ func (m ExpandingScatterMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}
@ -567,6 +575,7 @@ Each river has one or two 1-square "bridges" over them`,
MinPlayers: 1,
MaxPlayers: 12,
BoardSizes: FixedSizes(Dimensions{11, 11}, Dimensions{19, 19}, Dimensions{25, 25}),
Tags: []string{TAG_HAZARD_PLACEMENT, TAG_SNAKE_PLACEMENT},
}
}

View file

@ -25,6 +25,7 @@ func (m HealingPoolsMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 8,
BoardSizes: FixedSizes(Dimensions{7, 7}, Dimensions{11, 11}, Dimensions{19, 19}),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}

View file

@ -29,6 +29,7 @@ func TestRegisteredMaps(t *testing.T) {
require.NotZero(t, meta.MaxPlayers, "registered maps must have maximum players declared")
require.LessOrEqual(t, meta.MaxPlayers, meta.MaxPlayers, "max players should always be >= min players")
require.NotEmpty(t, meta.BoardSizes, "registered maps must have at least one supported size declared")
require.NotNil(t, meta.Tags)
var setupBoardState *rules.BoardState
// "fuzz test" supported players

View file

@ -25,6 +25,7 @@ func (m RoyaleHazardsMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}

View file

@ -25,6 +25,7 @@ func (m SinkholesMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 8,
BoardSizes: FixedSizes(Dimensions{7, 7}, Dimensions{11, 11}, Dimensions{19, 19}),
Tags: []string{TAG_HAZARD_PLACEMENT},
}
}

View file

@ -54,6 +54,7 @@ func (m SoloMazeMap) Meta() Metadata {
Dimensions{19, 21},
Dimensions{25, 25},
),
Tags: []string{TAG_EXPERIMENTAL, TAG_FOOD_PLACEMENT, TAG_HAZARD_PLACEMENT, TAG_SNAKE_PLACEMENT},
}
}

View file

@ -23,6 +23,7 @@ func (m StandardMap) Meta() Metadata {
MinPlayers: 1,
MaxPlayers: 16,
BoardSizes: OddSizes(rules.BoardSizeSmall, rules.BoardSizeXXLarge),
Tags: []string{},
}
}