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
35
board.go
35
board.go
|
|
@ -1,5 +1,7 @@
|
|||
package rules
|
||||
|
||||
import "fmt"
|
||||
|
||||
type BoardState struct {
|
||||
Turn int32
|
||||
Height int32
|
||||
|
|
@ -14,6 +16,11 @@ type Point struct {
|
|||
Y int32
|
||||
}
|
||||
|
||||
// Makes it easier to copy sample points out of Go logs and test failures.
|
||||
func (p Point) GoString() string {
|
||||
return fmt.Sprintf("{X:%d, Y:%d}", p.X, p.Y)
|
||||
}
|
||||
|
||||
type Snake struct {
|
||||
ID string
|
||||
Body []Point
|
||||
|
|
@ -95,26 +102,40 @@ func PlaceSnakesFixed(rand Rand, b *BoardState, snakeIDs []string) error {
|
|||
|
||||
// Create start 8 points
|
||||
mn, md, mx := int32(1), (b.Width-1)/2, b.Width-2
|
||||
startPoints := []Point{
|
||||
cornerPoints := []Point{
|
||||
{mn, mn},
|
||||
{mn, md},
|
||||
{mn, mx},
|
||||
{mx, mn},
|
||||
{mx, mx},
|
||||
}
|
||||
cardinalPoints := []Point{
|
||||
{mn, md},
|
||||
{md, mn},
|
||||
{md, mx},
|
||||
{mx, mn},
|
||||
{mx, md},
|
||||
{mx, mx},
|
||||
}
|
||||
|
||||
// Sanity check
|
||||
if len(b.Snakes) > len(startPoints) {
|
||||
if len(b.Snakes) > (len(cornerPoints) + len(cardinalPoints)) {
|
||||
return ErrorTooManySnakes
|
||||
}
|
||||
|
||||
// Randomly order them
|
||||
rand.Shuffle(len(startPoints), func(i int, j int) {
|
||||
startPoints[i], startPoints[j] = startPoints[j], startPoints[i]
|
||||
rand.Shuffle(len(cornerPoints), func(i int, j int) {
|
||||
cornerPoints[i], cornerPoints[j] = cornerPoints[j], cornerPoints[i]
|
||||
})
|
||||
rand.Shuffle(len(cardinalPoints), func(i int, j int) {
|
||||
cardinalPoints[i], cardinalPoints[j] = cardinalPoints[j], cardinalPoints[i]
|
||||
})
|
||||
|
||||
var startPoints []Point
|
||||
if rand.Intn(2) == 0 {
|
||||
startPoints = append(startPoints, cornerPoints...)
|
||||
startPoints = append(startPoints, cardinalPoints...)
|
||||
} else {
|
||||
startPoints = append(startPoints, cardinalPoints...)
|
||||
startPoints = append(startPoints, cornerPoints...)
|
||||
}
|
||||
|
||||
// Assign to snakes in order given
|
||||
for i := 0; i < len(b.Snakes); i++ {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue