-
Notifications
You must be signed in to change notification settings - Fork 0
/
calculations.go
86 lines (68 loc) · 1.61 KB
/
calculations.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package main
import (
"math"
"math/rand"
rl "github.com/gen2brain/raylib-go/raylib"
)
func CalculateSnakePosition(direction rl.Vector2, parts []rl.Vector2) {
for i := len(parts) - 1; i >= 0; i-- {
if i == 0 {
parts[0].X += direction.X
parts[0].Y += direction.Y
} else {
parts[i].X = parts[i-1].X
parts[i].Y = parts[i-1].Y
}
}
}
func SpawnFruit(snakeParts []rl.Vector2) rl.Vector2 {
var X int32 = 0
var Y int32 = 0
l:
for {
X = rand.Int31n(gridWidth)
Y = rand.Int31n(gridHeight)
if X == 0 || Y == 0 {
continue
}
for i := range snakeParts {
if snakeParts[i].X == float32(X) && snakeParts[i].Y == float32(Y) {
continue l
}
}
break
}
return rl.Vector2{X: float32(X), Y: float32(Y)}
}
func CheckCollisions(snakeParts []rl.Vector2, fruit rl.Vector2) string {
for i := 1; i < len(snakeParts); i++ {
if snakeParts[i].X == snakeParts[0].X && snakeParts[i].Y == snakeParts[0].Y {
return "snake"
}
}
if snakeParts[0].X == fruit.X && snakeParts[0].Y == fruit.Y {
return "fruit"
}
if snakeParts[0].X < 0 || int32(snakeParts[0].X) > gridWidth || snakeParts[0].Y < 0 || int32(snakeParts[0].Y) > gridHeight {
return "wall"
}
return ""
}
func DirectionToRotation(direction rl.Vector2) float32 {
var rotation float32 = 0.0
if direction.Y == -1 {
rotation = 0
} else if direction.Y == 1 {
rotation = 180
} else if direction.X == -1 {
rotation = 270
} else {
rotation = 90
}
return rotation
}
func VectorToAngle(v rl.Vector2) float32 {
rad := float32(math.Atan2(float64(v.Y), float64(v.X)) * (180 / math.Pi))
angleDeg := rad * (180 / math.Pi)
return angleDeg
}