snake/game.go

135 lines
2.5 KiB
Go
Raw Normal View History

2023-11-02 14:20:33 +01:00
package main
import (
"log"
"time"
2023-11-06 22:36:47 +01:00
"github.com/gdamore/tcell/v2"
)
2023-11-02 14:20:33 +01:00
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
2023-11-06 23:43:45 +01:00
} 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
}
}
}
}