DEV 1303: Add empty and royale maps and update game map interface (#72)
* move random generator into Settings * add empty and royale maps * place snakes on either cardinal or corner positions first
This commit is contained in:
parent
6fa2da2f01
commit
e94d758a9b
12 changed files with 479 additions and 52 deletions
|
|
@ -23,12 +23,14 @@ func (m StandardMap) Meta() Metadata {
|
|||
}
|
||||
|
||||
func (m StandardMap) SetupBoard(initialBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
|
||||
rand := settings.GetRand(0)
|
||||
|
||||
snakeIDs := make([]string, 0, len(initialBoardState.Snakes))
|
||||
for _, snake := range initialBoardState.Snakes {
|
||||
snakeIDs = append(snakeIDs, snake.ID)
|
||||
}
|
||||
|
||||
tempBoardState, err := rules.CreateDefaultBoardState(editor.Random(), initialBoardState.Width, initialBoardState.Height, snakeIDs)
|
||||
tempBoardState, err := rules.CreateDefaultBoardState(rand, initialBoardState.Width, initialBoardState.Height, snakeIDs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -47,30 +49,31 @@ func (m StandardMap) SetupBoard(initialBoardState *rules.BoardState, settings ru
|
|||
}
|
||||
|
||||
func (m StandardMap) UpdateBoard(lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
|
||||
rand := settings.GetRand(lastBoardState.Turn)
|
||||
minFood := int(settings.MinimumFood)
|
||||
foodSpawnChance := int(settings.FoodSpawnChance)
|
||||
numCurrentFood := len(lastBoardState.Food)
|
||||
|
||||
if numCurrentFood < minFood {
|
||||
placeFoodRandomly(lastBoardState, editor, minFood-numCurrentFood)
|
||||
placeFoodRandomly(rand, lastBoardState, editor, minFood-numCurrentFood)
|
||||
return nil
|
||||
}
|
||||
if foodSpawnChance > 0 && (100-editor.Random().Intn(100)) < foodSpawnChance {
|
||||
placeFoodRandomly(lastBoardState, editor, 1)
|
||||
if foodSpawnChance > 0 && (100-rand.Intn(100)) < foodSpawnChance {
|
||||
placeFoodRandomly(rand, lastBoardState, editor, 1)
|
||||
return nil
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func placeFoodRandomly(b *rules.BoardState, editor Editor, n int) {
|
||||
func placeFoodRandomly(rand rules.Rand, b *rules.BoardState, editor Editor, n int) {
|
||||
unoccupiedPoints := rules.GetUnoccupiedPoints(b, false)
|
||||
|
||||
if len(unoccupiedPoints) < n {
|
||||
n = len(unoccupiedPoints)
|
||||
}
|
||||
|
||||
editor.Random().Shuffle(len(unoccupiedPoints), func(i int, j int) {
|
||||
rand.Shuffle(len(unoccupiedPoints), func(i int, j int) {
|
||||
unoccupiedPoints[i], unoccupiedPoints[j] = unoccupiedPoints[j], unoccupiedPoints[i]
|
||||
})
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue