package main import ( "slices" ) func compass(near Position, offset int) []Position { return []Position{ Position{near.X, near.Y - offset}, Position{near.X, near.Y + offset}, Position{near.X + offset, near.Y}, Position{near.X - offset, near.Y}, } } func (game *Game) Inbounds(pos Position, offset int) bool { return pos.X >= offset && pos.X < game.Width - offset && pos.Y >= offset && pos.Y < game.Height - offset } func (game *Game) Occupied(pos Position) bool { _, is_enemy := game.Enemies[pos] is_player := pos == game.Player.Pos // Inbounds comes first to prevent accessing level with bad x,y return !game.Inbounds(pos, 1) || game.Level[pos.Y][pos.X] == WALL || is_enemy || is_player } func (game *Game) FillMap(target Map, setting rune) { for y := 0 ; y < game.Height; y++ { target[y] = slices.Repeat([]rune{setting}, game.Width) } } func (game *Game) Neighbors(near Position) []Position { result := make([]Position, 0, 4) points := compass(near, 2) for _, pos := range points { if game.Inbounds(pos, 0) { result = append(result, pos) } } return result } func (game *Game) NewMap() { game.FillMap(game.Level, '#') }