Rename 'maze' -> 'constrictor', remove use of food
This commit is contained in:
parent
f9262bc336
commit
12f9297b8b
4 changed files with 183 additions and 216 deletions
54
constrictor.go
Normal file
54
constrictor.go
Normal 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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue