* DEV-1761: Clean up Ruleset interface (#115) * remove legacy ruleset types and simplify ruleset interface * remove unnecessary settings argument from Ruleset interface * decouple rules.Settings from client API and store settings as strings * DEV 1761: Add new BoardState and Point fields (#117) * add Point.TTL, Point.Value, GameState and PointState to BoardState * allow maps to access BoardState.GameState,PointState * add PreUpdateBoard and refactor snail_mode with it * fix bug where an extra turn was printed to the console * fix formatting * fix lint errors Co-authored-by: JonathanArns <jonathan.arns@googlemail.com>
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package rules
|
|
|
|
var constrictorRulesetStages = []string{
|
|
StageGameOverStandard,
|
|
StageMovementStandard,
|
|
StageStarvationStandard,
|
|
StageHazardDamageStandard,
|
|
StageFeedSnakesStandard,
|
|
StageEliminationStandard,
|
|
StageSpawnFoodNoFood,
|
|
StageModifySnakesAlwaysGrow,
|
|
}
|
|
|
|
var wrappedConstrictorRulesetStages = []string{
|
|
StageGameOverStandard,
|
|
StageMovementWrapBoundaries,
|
|
StageStarvationStandard,
|
|
StageHazardDamageStandard,
|
|
StageFeedSnakesStandard,
|
|
StageEliminationStandard,
|
|
StageSpawnFoodNoFood,
|
|
StageModifySnakesAlwaysGrow,
|
|
}
|
|
|
|
func RemoveFoodConstrictor(b *BoardState, settings Settings, moves []SnakeMove) (bool, error) {
|
|
// Remove all food from the board
|
|
b.Food = []Point{}
|
|
|
|
return false, nil
|
|
}
|
|
|
|
func GrowSnakesConstrictor(b *BoardState, settings Settings, moves []SnakeMove) (bool, error) {
|
|
// Set all snakes to max health and ensure they grow next turn
|
|
for i := 0; i < len(b.Snakes); i++ {
|
|
if len(b.Snakes[i].Body) <= 0 {
|
|
return false, ErrorZeroLengthSnake
|
|
}
|
|
b.Snakes[i].Health = SnakeMaxHealth
|
|
|
|
tail := b.Snakes[i].Body[len(b.Snakes[i].Body)-1]
|
|
subTail := b.Snakes[i].Body[len(b.Snakes[i].Body)-2]
|
|
if tail != subTail {
|
|
growSnake(&b.Snakes[i])
|
|
}
|
|
}
|
|
|
|
return false, nil
|
|
}
|