-
Notifications
You must be signed in to change notification settings - Fork 0
/
Snake.py
167 lines (130 loc) · 3.98 KB
/
Snake.py
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import pygame
import random as r
import time
pygame.init()
clock = pygame.time.Clock()
#Set screen size and creates it
screenSize = 600
win = pygame.display.set_mode((screenSize,screenSize))
pygame.display.set_caption("Snake!")
#Size of Snake
square = 20
xHead = (screenSize - square)/2
yHead = (screenSize - square)/2
xSnake = [xHead]
ySnake = [yHead]
turned = 0
xVel = 0
yVel = 25
FoodPickedUp = False
FoodPickedUp2 = False
#Sets location for foodpellot
def CreateFoodPellet():
global foodX
foodX = r.randrange(0, screenSize, square)
global foodY
foodY = r.randrange(0, screenSize, square)
#GG Mate Lol
def Ded():
#Set for GG
font = pygame.font.Font('freesansbold.ttf', 32)
x = str(len(xSnake))
words = ('Game Over --' + " Score: " + x)
text = font.render(words, True, (0,0,0), (255,0,0))
textRect = text.get_rect()
textRect.center = (screenSize // 2, screenSize // 2)
win.fill((255,0,0))
win.blit(text, textRect)
pygame.display.update()
global run
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
time.sleep(3)
CreateFoodPellet()
run = True
while run:
#Delay
pygame.time.delay(100)
#Event Kill
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
#Get Key
keys = pygame.key.get_pressed()
#Arrow Keys control head
if (keys[pygame.K_w] or keys[pygame.K_UP]) and turned == 0:
if yVel != 25:
yVel = -25
xVel = 0
turned = 1
if (keys[pygame.K_s] or keys[pygame.K_DOWN]) and turned == 0:
if yVel != -25:
yVel = 25
xVel = 0
turned = 1
if (keys[pygame.K_a] or keys[pygame.K_LEFT]) and turned == 0:
if xVel != 25:
xVel = -25
yVel = 0
turned = 1
if (keys[pygame.K_d] or keys[pygame.K_RIGHT]) and turned == 0:
if xVel != -25:
xVel = 25
yVel = 0
turned = 1
#Food pickup manual
if keys[pygame.K_f]:
FoodPickedUp = True
#Set background
win.fill((0,0,0))
#Crash into Wall
for m in range(len(xSnake)):
if ((xSnake[m] <= -15 or screenSize + 15 <= xSnake[m] + square)):
Ded()
for m in range(len(ySnake)):
if ((ySnake[m] <= -15 or screenSize +15 <= ySnake[m] + square)):
Ded()
#Crash into Self
for a in range(len(xSnake)):
for b in range(len(xSnake)):
if a != b:
if (xSnake[a] == xSnake[b]):
if (ySnake[a] == ySnake[b]):
Ded()
#Pick up food pellet
for b in range(len(xSnake)):
if ((xSnake[b] <= foodX <= xSnake[b] + square) or (xSnake[b] <= foodX + square <= xSnake[b] + square)):
if ((ySnake[b] <= foodY <= ySnake[b] + square) or (ySnake[b] <= foodY + square <= ySnake[b] + square)):
FoodPickedUp = True
#First half of food pickup to save last body position
if FoodPickedUp == True:
xSet = xSnake[-1]
ySet = ySnake[-1]
FoodPickedUp2 = True
FoodPickedUp = False
#Move Body
i = len(xSnake)
while i > 0:
if i-1 > 0:
xSnake[i-1] = xSnake[i-2]
ySnake[i-1] = ySnake[i-2]
pygame.draw.rect(win, (0,0,255), (xSnake[i-1],ySnake[i-1],square,square), 0)
i-=1
#Second Half of Food Pick up to set last square back
if FoodPickedUp2 == True:
xSnake.append(xSet)
ySnake.append(ySet)
pygame.draw.rect(win, (0,0,255), (xSnake[-1],ySnake[-1],square,square), 0)
CreateFoodPellet()
FoodPickedUp2 = False
#Move Head
xSnake[0] += xVel
ySnake[0] += yVel
pygame.draw.rect(win, (0,0,255), (xSnake[0],ySnake[0],square,square), 0)
pygame.draw.rect(win, (255,0,0), (foodX,foodY,square,square), 0)
#Reset Turn Lock
turned = 0
#Refresh
pygame.display.update()