|
|
|
@ -339,21 +339,23 @@ func (game *Game) CloneMap() Map { |
|
|
|
|
return new_map |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (game *Game) PathAddNeighbors(neighbors []Position, closed Map, near Position) { |
|
|
|
|
func (game *Game) PathAddNeighbors(neighbors []Position, closed Map, near Position) []Position { |
|
|
|
|
points := compass(near.x, near.y, 1) |
|
|
|
|
|
|
|
|
|
for _, pos := range points { |
|
|
|
|
if !game.Occupied(pos.x, pos.y) { |
|
|
|
|
if !game.Occupied(pos.x, pos.y) && closed[pos.y][pos.x] == SPACE { |
|
|
|
|
closed[pos.y][pos.x] = WALL |
|
|
|
|
neighbors = append(neighbors, pos) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return neighbors |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (game *Game) PathEnemies() { |
|
|
|
|
in_grid := make([][]int, game.height, game.height) |
|
|
|
|
game.FillPaths(in_grid, 1) |
|
|
|
|
in_grid[game.player.y][game.player.x] = 1 |
|
|
|
|
in_grid[game.player.y][game.player.x] = 0 |
|
|
|
|
|
|
|
|
|
game.FillPaths(game.paths, PATH_LIMIT) |
|
|
|
|
closed := game.CloneMap() |
|
|
|
@ -376,14 +378,15 @@ func (game *Game) PathEnemies() { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, pos := range starting_pixels { |
|
|
|
|
game.PathAddNeighbors(open_pixels, closed, pos) |
|
|
|
|
open_pixels = game.PathAddNeighbors(open_pixels, closed, pos) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
counter = 1 |
|
|
|
|
for counter < PATH_LIMIT && len(open_pixels) > 0 { |
|
|
|
|
next_open := make([]Position, 0, 10) |
|
|
|
|
for _, pos := range open_pixels { |
|
|
|
|
game.paths[pos.y][pos.x] = counter |
|
|
|
|
game.PathAddNeighbors(next_open, closed, pos) |
|
|
|
|
next_open = game.PathAddNeighbors(next_open, closed, pos) |
|
|
|
|
} |
|
|
|
|
open_pixels = next_open |
|
|
|
|
counter += 1 |
|
|
|
|