package robots func (game *Game) initRobots() { var fabricate int = game.level * 16 for i := 0; i < fabricate; i++ { var robot Robot robot.id = i robot.comms = make(chan Position) var found bool var rndPos Position for !found { rndPos = game.randPos() if !game.onPlayer(rndPos) { found = true } } robot.position = rndPos game.robots = append(game.robots, robot) go game.Robot(robot) } } 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() { var robotPos Position // Iterate through the robots for i, _ := range game.robots { game.robots[i].comms <- game.player.position robotPos = <-game.robots[i].comms game.robots[i].position = robotPos } // 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 } func (game *Game) deleteRobot(robot Robot) { var rowboz []Robot // Delete from Array for _, r := range game.robots { if robot.id != r.id { rowboz = append(rowboz, r) } } game.robots = nil game.robots = rowboz // Close the channel close(robot.comms) game.player.score++ } func (game *Game) Robot(robot Robot) { var player Position var robotPos Position = robot.position var emptyPos Position for { // Wait for input from the channel player = <-robot.comms if player == emptyPos { close(robot.comms) return } //fmt.Println(player, robotPos) // Determine direction to move in robotPos = game.moveRobot(player, robot.position) robot.position = robotPos // Return new position of robot robot.comms <- robotPos } } func (game *Game) moveRobot(player Position, robot Position) Position { var newPosition Position // Determine in which direction to go if player.x < robot.x { newPosition.x = robot.x - 1 } else if player.x > robot.x { newPosition.x = robot.x + 1 } if player.y < robot.y { newPosition.y = robot.y - 1 } else if player.y > robot.y { newPosition.y = robot.y + 1 } //fmt.Println(player, robot, newPosition) return newPosition }