diff --git a/game.go b/game.go index 0c7a804..189e319 100644 --- a/game.go +++ b/game.go @@ -3,6 +3,7 @@ package main import ( "fmt" "log" + "math/rand" "github.com/gdamore/tcell/v2" ) @@ -12,14 +13,22 @@ func gameinit() { if err != nil { log.Fatalln("Initilization error: ", err) } - go gameDirector(&game) - keyboardProcessor(&game) + go game.gameDirector() + game.keyboardProcessor() // Quit the screen quit(&game) // Give closure - fmt.Println("You get rekt lol.") + if game.gameover == 1 { + fmt.Println("You get rekt by a robot") + } else if game.gameover == 2 { + fmt.Println("You took the easy way out") + } + + fmt.Println("Score:", game.player.score) + fmt.Println("Moves:", game.player.moves) + fmt.Println("Teleports:", game.player.teleports) } @@ -51,6 +60,7 @@ func initialize() (Game, error) { moves: 0, teleports: 0, }, + level: 1, // robots: []Robot, // I need this maybe // trash: []Position, // I will need this gameover: 0, @@ -59,7 +69,7 @@ func initialize() (Game, error) { return game, err } -func gameDirector(game *Game) { +func (game *Game) gameDirector() { defer quit(game) for { @@ -68,11 +78,15 @@ func gameDirector(game *Game) { game.screen.Clear() // Draw starter conditions - game.drawBox(game) - game.drawPlayer(game) - game.drawCoords(game) + game.drawBox() + game.drawPlayer() + game.drawCoords() // Draw robots?? + if len(game.robots) == 0 { + game.initRobots() + } + game.drawRobots() // Draw the screen game.screen.Show() @@ -84,7 +98,7 @@ func gameDirector(game *Game) { } -func keyboardProcessor(game *Game) { +func (game *Game) keyboardProcessor() { defer close(game.keypresses) for { @@ -97,6 +111,7 @@ func keyboardProcessor(game *Game) { case *tcell.EventKey: // Keys to bug out if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC { + game.gameover = 2 return // Screen management @@ -126,18 +141,32 @@ func keyboardProcessor(game *Game) { game.keypresses <- teleport } } - - if game.gameover != 0 { - return - } - } } func quit(game *Game) { + game.screen.Clear() maybePanic := recover() game.screen.Fini() if maybePanic != nil { panic(maybePanic) } } + +func (game *Game) randPos() Position { + var safe bool + var pos Position + + for !safe { + x := rand.Intn(80) + y := rand.Intn(24) + + if x == 0 || x == 79 || y == 0 || y == 23 { + safe = false + } else { + pos = Position{x: x, y: y} + safe = true + } + } + return pos +} diff --git a/player.go b/player.go index 6902daa..78cee47 100644 --- a/player.go +++ b/player.go @@ -2,7 +2,7 @@ package main import "math/rand" -func (g *Game) drawPlayer(game *Game) { +func (game *Game) drawPlayer() { game.screen.SetContent(game.player.position.x, game.player.position.y, '@', nil, game.style) } @@ -52,13 +52,23 @@ func (g *Game) movePlayer(game *Game, press int) { game.player.moves++ } } else if press == teleport { - game.teleport(game) + game.teleport() game.player.teleports++ } } -func (g *Game) teleport(game *Game) { +func (game *Game) teleport() { // Draw something nice game.player.position.x = rand.Intn(80) game.player.position.y = rand.Intn(24) } + +func (game *Game) onPlayer(pos Position) bool { + var onPlayer bool + if pos.x == game.player.position.x && pos.y == game.player.position.y { + onPlayer = true + } else { + onPlayer = false + } + return onPlayer +} diff --git a/render.go b/render.go index 10c5ea0..d348aac 100644 --- a/render.go +++ b/render.go @@ -3,7 +3,7 @@ package main import "strconv" // drawBox Draw the outline of the box the snake can move in -func (g *Game) drawBox(game *Game) { +func (game *Game) drawBox() { // Assuming we will always have this x1 := 0 @@ -38,8 +38,8 @@ func (g *Game) drawBox(game *Game) { } -// drawCoords Print the coordinates of the head of the snake -func (g *Game) drawCoords(game *Game) { +// drawCoords Print the coordinates of the player +func (game *Game) drawCoords() { var x, y int = 25, 24 for _, r := range []rune("[ x:" + strconv.FormatInt(int64(game.player.position.x), 10) + " y: " + strconv.FormatInt(int64(game.player.position.y), 10) + " ]") { game.screen.SetContent(x, y-1, r, nil, game.style) diff --git a/robots.go b/robots.go index 214e700..8e69946 100644 --- a/robots.go +++ b/robots.go @@ -1,9 +1,34 @@ package main -func drawRobot(game *Game) { - game.screen.SetContent(game.player.position.x, game.player.position.y, '+', nil, game.style) +import "fmt" + +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 + } + } + game.robots = append(game.robots, rndPos) + } + + for _, r := range game.robots { + fmt.Println("xy", r.x, r.y) + } } -func drawTrash(game *Game) { - game.screen.SetContent(game.player.position.x, game.player.position.y, '*', nil, game.style) +func (game *Game) drawRobots() { + for _, r := range game.robots { + game.screen.SetContent(r.x, r.y, '+', nil, game.style) + } +} + +func (game *Game) drawTrash() { + for _, t := range game.trash { + game.screen.SetContent(t.x, t.y, '*', nil, game.style) + } } diff --git a/types.go b/types.go index 87071e9..dda07dc 100644 --- a/types.go +++ b/types.go @@ -35,7 +35,8 @@ type Game struct { style tcell.Style keypresses chan int player Player - robots []Robot + level int + robots []Position trash []Position gameover int }