2020-12-07 18:11:00 -08:00
|
|
|
package rules
|
|
|
|
|
|
|
|
|
|
import ()
|
|
|
|
|
|
2020-12-08 13:20:13 -08:00
|
|
|
type MazeRuleset struct {
|
2020-12-07 18:11:00 -08:00
|
|
|
StandardRuleset
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-08 13:20:13 -08:00
|
|
|
func (r *MazeRuleset) CreateInitialBoardState(width int32, height int32, snakeIDs []string) (*BoardState, error) {
|
2020-12-07 18:11:00 -08:00
|
|
|
initialBoardState, err := r.StandardRuleset.CreateInitialBoardState(width, height, snakeIDs)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = r.fillBoardWithFood(initialBoardState)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return initialBoardState, nil
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-08 13:20:13 -08:00
|
|
|
func (r *MazeRuleset) CreateNextBoardState(prevState *BoardState, moves []SnakeMove) (*BoardState, error) {
|
2020-12-07 18:11:00 -08:00
|
|
|
nextState, err := r.StandardRuleset.CreateNextBoardState(prevState, moves)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = r.fillBoardWithFood(nextState)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nextState, nil
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-08 13:20:13 -08:00
|
|
|
func (r *MazeRuleset) fillBoardWithFood(b *BoardState) error {
|
2020-12-07 18:11:00 -08:00
|
|
|
unoccupiedPoints := r.getUnoccupiedPoints(b, true)
|
|
|
|
|
b.Food = append(b.Food, unoccupiedPoints...)
|
|
|
|
|
return nil
|
|
|
|
|
}
|