CLI: No longer send /move requests to eliminated snakes.
This commit is contained in:
parent
bae7a5083c
commit
f65f6d65d7
1 changed files with 22 additions and 5 deletions
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -249,15 +250,30 @@ func createNextBoardState(ruleset rules.Ruleset, state *rules.BoardState, outOfB
|
||||||
var moves []rules.SnakeMove
|
var moves []rules.SnakeMove
|
||||||
if Sequential {
|
if Sequential {
|
||||||
for _, snake := range snakes {
|
for _, snake := range snakes {
|
||||||
|
for _, stateSnake := range state.Snakes {
|
||||||
|
if snake.ID == stateSnake.ID && stateSnake.EliminatedCause == rules.NotEliminated {
|
||||||
moves = append(moves, getMoveForSnake(ruleset, state, snake, outOfBounds))
|
moves = append(moves, getMoveForSnake(ruleset, state, snake, outOfBounds))
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
c := make(chan rules.SnakeMove, len(snakes))
|
|
||||||
for _, snake := range snakes {
|
|
||||||
go getConcurrentMoveForSnake(ruleset, state, snake, outOfBounds, c)
|
|
||||||
}
|
}
|
||||||
for range snakes {
|
}
|
||||||
moves = append(moves, <-c)
|
} else {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
c := make(chan rules.SnakeMove, len(snakes))
|
||||||
|
|
||||||
|
for _, snake := range snakes {
|
||||||
|
for _, stateSnake := range state.Snakes {
|
||||||
|
if snake.ID == stateSnake.ID && stateSnake.EliminatedCause == rules.NotEliminated {
|
||||||
|
wg.Add(1)
|
||||||
|
go getConcurrentMoveForSnake(&wg, ruleset, state, snake, outOfBounds, c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wg.Wait()
|
||||||
|
close(c)
|
||||||
|
|
||||||
|
for move := range c {
|
||||||
|
moves = append(moves, move)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, move := range moves {
|
for _, move := range moves {
|
||||||
|
|
@ -273,7 +289,8 @@ func createNextBoardState(ruleset rules.Ruleset, state *rules.BoardState, outOfB
|
||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
|
|
||||||
func getConcurrentMoveForSnake(ruleset rules.Ruleset, state *rules.BoardState, snake Battlesnake, outOfBounds []rules.Point, c chan rules.SnakeMove) {
|
func getConcurrentMoveForSnake(wg *sync.WaitGroup, ruleset rules.Ruleset, state *rules.BoardState, snake Battlesnake, outOfBounds []rules.Point, c chan rules.SnakeMove) {
|
||||||
|
defer wg.Done()
|
||||||
c <- getMoveForSnake(ruleset, state, snake, outOfBounds)
|
c <- getMoveForSnake(ruleset, state, snake, outOfBounds)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue