diff --git a/game.go b/game.go index bcbec6a..de78ca8 100644 --- a/game.go +++ b/game.go @@ -7,6 +7,13 @@ import ( "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) @@ -31,7 +38,7 @@ func quit(screen tcell.Screen) { } } -func game_director(screen tcell.Screen, style tcell.Style) { +func game_director(screen tcell.Screen, style tcell.Style, keypresses chan int) { //var score int //var scoreCounter int = 1 @@ -47,22 +54,61 @@ func game_director(screen tcell.Screen, style tcell.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.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 { @@ -73,24 +119,16 @@ func game_director(screen tcell.Screen, style tcell.Style) { 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 } - default: - time.Sleep(500 * time.Millisecond) - } - - drawBox(screen, 0, 0, x-1, y-1, style) - updateScore(screen, style, snakex) - updateSnakePos(&snakex, &snakey) - drawSnake(screen, style, snakex, snakey) - - // Draw the screen - screen.Show() - - if snakex > 75 { - return - } - } } diff --git a/main.go b/main.go index c70f469..14b09db 100644 --- a/main.go +++ b/main.go @@ -6,12 +6,16 @@ import ( func main() { + // Create a channel to push key-presses through + keypresses := make(chan int) + screen, style, err := initilize() if err != nil { log.Fatalln("Initlization error: ", err) } - game_director(screen, style) + go game_director(screen, style, keypresses) + keyboardProcessor(screen, keypresses) quit(screen)