Attempt to start using Go Routines

This commit is contained in:
Sacha Ligthert 2024-01-08 11:12:13 +01:00
parent 76e745801a
commit 06aa9b54c7
3 changed files with 78 additions and 27 deletions

View File

@ -65,7 +65,7 @@ func initialize() (Game, error) {
gameover: 0, gameover: 0,
} }
// game.initRobots() game.initRobots()
return game, err return game, err
} }
@ -73,19 +73,18 @@ func initialize() (Game, error) {
func (game *Game) gameDirector() { func (game *Game) gameDirector() {
defer quit(game) defer quit(game)
// TODO reorder this
for game.gameover == 0 { for game.gameover == 0 {
// Clean the screen // Clean the screen
game.screen.Clear() game.screen.Clear()
// Draw robots?? // Draw robots??
// if len(game.robots) == 0 { if len(game.robots) == 0 {
// game.level++ game.level++
// game.cleanTrash() game.cleanTrash()
// game.resetPlayer() game.resetPlayer()
// game.initRobots() game.initRobots()
// } }
// Draw starter conditions // Draw starter conditions
game.drawBox() game.drawBox()

View File

@ -3,6 +3,12 @@ package robots
func (game *Game) initRobots() { func (game *Game) initRobots() {
var fabricate int = game.level * 16 var fabricate int = game.level * 16
for i := 0; i < fabricate; i++ { for i := 0; i < fabricate; i++ {
var robot Robot
robot.id = i
robot.comms = make(chan Position)
var found bool var found bool
var rndPos Position var rndPos Position
for !found { for !found {
@ -11,11 +17,10 @@ func (game *Game) initRobots() {
found = true found = true
} }
} }
rndRobot := Robot{
id: i, robot.position = rndPos
position: rndPos, game.robots = append(game.robots, robot)
} go game.Robot(robot)
game.robots = append(game.robots, rndRobot)
} }
} }
@ -26,21 +31,15 @@ func (game *Game) drawRobots() {
} }
func (game *Game) moveRobots() { func (game *Game) moveRobots() {
var robotPos Position
// Iterate through the robots // Iterate through the robots
for i, r := range game.robots { for i, _ := range game.robots {
// Determine in which direction to go game.robots[i].comms <- game.player.position
if game.player.position.x < r.position.x { robotPos = <-game.robots[i].comms
game.robots[i].position.x-- game.robots[i].position = robotPos
} 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++
}
} }
@ -89,14 +88,66 @@ func (game *Game) deleteRobot(robot Robot) {
var rowboz []Robot var rowboz []Robot
// Delete from Array
for _, r := range game.robots { for _, r := range game.robots {
if robot != r { if robot.id != r.id {
rowboz = append(rowboz, r) rowboz = append(rowboz, r)
} }
} }
game.robots = nil game.robots = nil
game.robots = rowboz game.robots = rowboz
// Close the channel
close(robot.comms)
game.player.score++ 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
}

View File

@ -41,5 +41,6 @@ type Game struct {
type Robot struct { type Robot struct {
id int id int
comms chan Position
position Position position Position
} }