|
|
@@ -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
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
}
|