| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- 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)
- 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 safe bool = false
- 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.x = x
- // pos.y = y
- // safe = true
- // }
- // }
- x := 1 + rand.Intn(77)
- y := 1 + rand.Intn(22)
- pos.x = x
- pos.y = y
- return pos
- }
|