rowboz/robots.go

126 lines
2.6 KiB
Go

package main
func (game *Game) initRobots() {
var fabricate int = game.level * 16
for i := 0; i < fabricate; i++ {
var found bool
var rndPos Position
for !found {
rndPos = game.randPos()
if !game.onPlayer(rndPos) {
found = true
}
}
rndRobot := Robot{
id: i,
position: rndPos,
}
game.robots = append(game.robots, rndRobot)
}
}
func (game *Game) drawRobots() {
for _, r := range game.robots {
game.screen.SetContent(r.position.x, r.position.y, '+', nil, game.style)
}
}
func (game *Game) moveRobots() {
// Iterate through the robots
for i, r := range game.robots {
// Determine in which direction to go
if game.player.position.x < r.position.x {
game.robots[i].position.x--
} else if game.player.position.x > r.position.x {
game.robots[i].position.x++
}
if game.player.position.y < r.position.y {
game.robots[i].position.y--
} else if game.player.position.y > r.position.y {
game.robots[i].position.y++
}
}
// After all the moves, lets check if any of the rowboz collided with anything
for _, r := range game.robots {
// Hit a player? Game over!
if game.onPlayer(r.position) {
game.gameover = 1
return
}
// Robots mingling? Trash!
if game.onRobot(r) {
// Delete robot
game.deleteRobot(r)
// Create trash
game.addTrash(r)
}
// Hugging Trash? More trash!
if game.onTrash(r.position) {
// Delete robot
game.deleteRobot(r)
}
}
}
func (game *Game) onRobot(robot Robot) bool {
var found bool = false
for _, r := range game.robots {
if robot.id != r.id && robot.position == r.position {
found = true
}
}
return found
}
// TODO: improve this
func (game *Game) deleteRobot(robot Robot) {
// The following would work, if it wasn't for the fact you are iterating through an array,
// and deleting elements form that same array. So deleting item #15 isn't going to work
// when the array has been reduced to 13 elements.
// if robot < len(game.robots) {
// game.robots = append(game.robots[:robot], game.robots[robot+1:]...)
// }
// This isn't going to work for the same reason,
// and it adds the issue that random robots will get deleted.
// var rowboz []Position
// for i, r := range game.robots {
// if robot != i {
// rowboz = append(rowboz, r)
// }
// }
// game.robots = nil
// game.robots = rowboz
// Conclusion: I need to find a different way to do this properly while iterating to that same array.
var rowboz []Robot
for _, r := range game.robots {
if robot != r {
rowboz = append(rowboz, r)
}
}
game.robots = nil
game.robots = rowboz
game.player.score++
}