Rename 'maze' -> 'constrictor', remove use of food

This commit is contained in:
bvanvugt 2021-01-19 14:55:49 -08:00
parent f9262bc336
commit 12f9297b8b
4 changed files with 183 additions and 216 deletions

54
constrictor.go Normal file
View file

@ -0,0 +1,54 @@
package rules
import ()
type ConstrictorRuleset struct {
StandardRuleset
}
func (r *ConstrictorRuleset) CreateInitialBoardState(width int32, height int32, snakeIDs []string) (*BoardState, error) {
initialBoardState, err := r.StandardRuleset.CreateInitialBoardState(width, height, snakeIDs)
if err != nil {
return nil, err
}
err = r.applyConstrictorRules(initialBoardState)
if err != nil {
return nil, err
}
return initialBoardState, nil
}
func (r *ConstrictorRuleset) CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error) {
nextState, err := r.StandardRuleset.CreateNextBoardState(prevState, moves)
if err != nil {
return nil, err
}
err = r.applyConstrictorRules(nextState)
if err != nil {
return nil, err
}
return nextState, nil
}
func (r *ConstrictorRuleset) applyConstrictorRules(b *BoardState) error {
// Remove all food from the board
b.Food = []Point{}
// Set all snakes to max health and ensure they grow next turn
for i := 0; i < len(b.Snakes); i++ {
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 {
r.growSnake(&b.Snakes[i])
}
}
return nil
}