package main import ( "fmt" "log" "math/rand" "github.com/gdamore/tcell/v2" ) func gameinit() { game, err := initialize() if err != nil { log.Fatalln("Initilization error: ", err) } go game.gameDirector() game.keyboardProcessor() // Quit the screen quit(&game) fmt.Println("\nDebug time: Trash") for i, t := range game.trash { fmt.Println("Trash: ", i, t) } // Give closure if game.gameover == 1 { fmt.Println("\nYou got rekt by a robot") } else if game.gameover == 2 { fmt.Println("\nYou took the easy way out") } fmt.Println("Score:", game.player.score) fmt.Println("Moves:", game.player.moves) fmt.Println("Teleports:", game.player.teleports) } func initialize() (Game, error) { var err error screen, err := tcell.NewScreen() if err != nil { log.Println("Error creating screen: ", err) } err = screen.Init() if err != nil { log.Fatalln("Error initializing screen: ", err) } style := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset) game := Game{ screen: screen, style: style, keypresses: make(chan int), player: Player{ position: Position{ x: 40, y: 12, }, score: 0, moves: 0, teleports: 0, }, level: 1, // robots: []Robot, // I need this maybe // trash: []Position, // I will need this gameover: 0, } return game, err } func (game *Game) gameDirector() { defer quit(game) // TODO reorder this for game.gameover == 0 { // Clean the screen game.screen.Clear() // Draw starter conditions game.drawBox() game.drawScore() game.drawPlayer() //game.drawCoords() game.drawDebug() // Draw robots?? if len(game.robots) == 0 { game.level++ game.cleanTrash() game.initRobots() } game.drawRobots() // Draw my ex-wife game.drawTrash() // Draw the screen game.screen.Show() // Process input game.movePlayer(game, <-game.keypresses) // Move robots game.moveRobots() } } func (game *Game) keyboardProcessor() { defer close(game.keypresses) for game.gameover == 0 { // Poll for an event ev := game.screen.PollEvent() // Fetch the type, and check if any other actions are required. switch ev := ev.(type) { case *tcell.EventKey: // Keys to bug out if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC { game.gameover = 2 return // Screen management } else if ev.Key() == tcell.KeyCtrlL { game.screen.Sync() // Player Movement } else if ev.Rune() == 'q' { game.keypresses <- upleft } else if ev.Rune() == 'e' { game.keypresses <- upright } else if ev.Rune() == 'z' { game.keypresses <- downleft } else if ev.Rune() == 'c' { game.keypresses <- downright } else if ev.Key() == tcell.KeyUp || ev.Rune() == 'w' { game.keypresses <- Up } else if ev.Key() == tcell.KeyRight || ev.Rune() == 'd' { game.keypresses <- Right } else if ev.Key() == tcell.KeyDown || ev.Rune() == 's' || ev.Rune() == 'x' { game.keypresses <- Down } else if ev.Key() == tcell.KeyLeft || ev.Rune() == 'a' { game.keypresses <- Left // Teleport the player } else if ev.Rune() == 't' { game.keypresses <- teleport } } } } func quit(game *Game) { game.screen.Clear() maybePanic := recover() game.screen.Fini() if maybePanic != nil { panic(maybePanic) } } func (game *Game) randPos() Position { var pos Position x := 1 + rand.Intn(77) y := 1 + rand.Intn(22) pos.x = x pos.y = y return pos }