-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsnake.py
More file actions
120 lines (93 loc) · 2.89 KB
/
snake.py
File metadata and controls
120 lines (93 loc) · 2.89 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import random
class snake:
def __init__(self):
self.FRAME_HEIGHT = 20
self.FRAME_WIDTH = 20
self.UP = "UP"
self.DOWN = "DOWN"
self.LEFT = "LEFT"
self.RIGHT = "RIGHT"
self.move = self.RIGHT
self.score = 0
self.snake = self.initialState()
self.food = self.setFood()
self.gameOver = False
self.scoreIncrement = 5
def initialState(self):
snake = [
[6,6],[6,5],[6,4]
]
return snake
def makeMove(self):
snake = self.getSnake()
food = self.getFood()
move = self.getMove()
# Switch cases to find where to
head = snake[0].copy()
if move == self.UP:
head[0] -= 1
elif move == self.DOWN:
head[0] += 1
elif move == self.RIGHT:
head[1] +=1
elif move == self.LEFT:
head[1] -=1
#case where it ran out of ground
# in this case come through the other way - classic i think
for i,item in enumerate(head):
if item == self.FRAME_WIDTH and i == 0 :
head[i] = 0
if item == -1 and i == 0:
head[i] = self.FRAME_WIDTH
if item == self.FRAME_HEIGHT and i == 1:
head[i] = 0
if item == -1 and i == 1:
head[i] = self.FRAME_HEIGHT
lost = True if head in snake else False
if not lost:
snake.insert(0,head)
if food == head :
food = self.setFood()
self.setScore()
elif not lost:
snake.pop()
self.snake = snake
self.food = food
self.gameOver = lost
def setFood(self):
snake = self.getSnake()
food = None
while food is None:
nf = [
random.randint(0,self.FRAME_HEIGHT-1),
random.randint(0, self.FRAME_WIDTH-1)
]
food = nf if nf not in snake else None
return food
def getScore(self):
return str(self.score)
def reset(self):
self.score = 0
self.gameOver = False
self.setMove(self.RIGHT)
self.snake = self.initialState()
self.food = self.setFood()
def isGameOver(self):
return self.gameOver
def getSnake(self):
return self.snake
def getFood(self):
return self.food
def setScore(self):
self.score += self.scoreIncrement
def setMove(self,move):
if move == self.RIGHT and self.move != self.LEFT:
self.move = self.RIGHT
elif move == self.LEFT and self.move != self.RIGHT:
self.move = self.LEFT
elif move == self.UP and self.move != self.DOWN:
self.move = self.UP
elif move == self.DOWN and self.move != self.UP:
self.move = self.DOWN
def getMove(self):
return self.move