15/lib/game.go
2023-07-25 11:20:51 +03:00

58 lines
925 B
Go

package lib
import (
"fmt"
"atomicgo.dev/keyboard"
"atomicgo.dev/keyboard/keys"
)
type Game struct {
board *Board
}
func (g *Game) PrintState() {
// Works only on Linux
fmt.Print("\033[H\033[2J")
fmt.Printf("To quit game press ESC.\n")
g.board.Print()
fmt.Printf("Solved: %t\n", g.board.SolvedFast())
}
func (g *Game) Loop() {
g.PrintState()
keyboard.Listen(func(key keys.Key) (stop bool, err error) {
switch key.Code {
case keys.CtrlC, keys.Escape:
return true, nil
case keys.Up:
g.board.Move(DOWN)
case keys.Down:
g.board.Move(UP)
case keys.Left:
g.board.Move(RIGHT)
case keys.Right:
g.board.Move(LEFT)
default:
fmt.Printf("\rYou pressed: %s\n", key)
}
g.PrintState()
if g.board.SolvedFast() {
fmt.Printf("\rYou Won!\n")
return true, nil
}
return false, nil
})
}
func Start() {
game := Game{board: NewBoard()}
game.board.Shuffle(10)
game.Loop()
}