-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
64 lines (59 loc) · 1.29 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package main
import (
"errors"
"fmt"
"github.com/tettoc/gosnake/direction"
"github.com/tettoc/gosnake/key"
"github.com/tettoc/gosnake/screenclear"
"github.com/tettoc/gosnake/snake"
"os"
"strconv"
"time"
)
func main() {
size, err := getSize()
if err != nil {
fmt.Println(err.Error())
return
}
foodNumber := size / 2
chanReading := key.StartReading()
snakeB := snake.SnakeBoard(size)
snk := snake.Snake{}
snk = append(snk, snake.Body{D: direction.East, X: 0, Y: 0})
run := true
for run {
snakeB.Print(snk)
var err = error(nil)
select {
case inst := <-chanReading:
if !inst.Run {
return
}
snk.ChangeDirection(inst.Dir)
case <-time.After(1 * time.Millisecond):
}
if snk, err = snk.Move(snakeB); err != nil {
key.Stop()
println(err.Error())
run = false
return
}
time.Sleep(200 * time.Millisecond)
screenclear.CleanScreen()
snakeB.Feed(foodNumber)
}
}
func getSize() (int, error) {
const minsize = 10
if len(os.Args) != 2 {
message := fmt.Sprintf("Give a size for board (min %d)", minsize)
return 0, errors.New(message)
}
if size, err := strconv.Atoi(os.Args[1]); err != nil || size < minsize {
message := fmt.Sprintf("Size should be an integer greater than %d", minsize)
return 0, errors.New(message)
} else {
return size, nil
}
}