package main import ( "log" "time" "github.com/gdamore/tcell/v2" ) const ( Left = iota Right Up Down ) func initilize() (tcell.Screen, tcell.Style, error) { style := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset) 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) } return screen, style, err } func quit(screen tcell.Screen) { maybePanic := recover() screen.Fini() if maybePanic != nil { panic(maybePanic) } } func game_director(screen tcell.Screen, style tcell.Style, keypresses chan int) { //var score int //var scoreCounter int = 1 //var field [80][24]int // fill up the field: // 0: empty // 1: snake // 2: apple // 3: border x, y := screen.Size() drawBox(screen, 0, 0, x-1, y-1, style) var snakex int = 3 var snakey int = 12 //var lastpress int for { // Clean the screen screen.Clear() drawBox(screen, 0, 0, x-1, y-1, style) updateScore(screen, style, snakex) select { case press := <-keypresses: if press == Left { snakex-- } else if press == Right { snakex++ } else if press == Up { snakey-- } else if press == Down { snakey++ } case <-time.After(1 * time.Second): snakex++ } //updateSnakePos(&snakex, &snakey) drawSnake(screen, style, snakex, snakey) // Draw the screen screen.Show() if snakex > 75 { return } time.Sleep(500 * time.Millisecond) } } func keyboardProcessor(screen tcell.Screen, keypresses chan int) { defer close(keypresses) for { // Poll for an event ev := screen.PollEvent() // Fetch the type, and check if any other actions are required. switch ev := ev.(type) { //case *tcell.EventResize: // x, y := screen.Size() // drawBox(screen, 0, 0, x-1, y-1, style) // updateScore(screen, style, snakex) // screen.Sync() case *tcell.EventKey: //fmt.Println("Key: ",ev.Rune()) if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC { return } else if ev.Rune() == 'q' || ev.Rune() == 'Q' { return } else if ev.Key() == tcell.KeyCtrlL { screen.Sync() } else if ev.Rune() == 'C' || ev.Rune() == 'c' { screen.Clear() } else if ev.Key() == tcell.KeyLeft { keypresses <- Left } else if ev.Key() == tcell.KeyRight { keypresses <- Right } else if ev.Key() == tcell.KeyDown { keypresses <- Down } else if ev.Key() == tcell.KeyUp { keypresses <- Up } } } }