This repository was archived by the owner on Apr 22, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 180
/
Copy pathsnake_game.py
128 lines (108 loc) · 3.08 KB
/
snake_game.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
# Contribution by https://github.com/Karan9034
import pygame
import sys
import random
class Snake(object):
def __init__(self):
self.length=1
self.positions=[((SCREEN_WIDTH/2),(SCREEN_HEIGHT/2))]
self.direction=random.choice([UP,DOWN,LEFT,RIGHT])
self.color=(17,24,47)
def get_head_position(self):
return self.positions[0]
def turn(self,point):
if self.length>1 and (point[0] * -1, point[1] * -1) == self.direction:
return
else:
self.direction=point
def move(self):
cur=self.get_head_position()
x,y=self.direction
new=((cur[0] + (x*GRIDSIZE))%SCREEN_WIDTH,(cur[1]+(y*GRIDSIZE))%SCREEN_HEIGHT)
if len(self.positions)>2 and new in self.positions[2:]:
pygame.quit()
sys.exit()
else:
self.positions.insert(0,new)
if len(self.positions)>self.length:
self.positions.pop()
def draw(self,surface):
for p in self.positions:
r=pygame.Rect((p[0],p[1]),(GRIDSIZE,GRIDSIZE))
pygame.draw.rect(surface,self.color,r)
pygame.draw.rect(surface,(93,216,228),r,1)
def handle_keys(self):
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type==pygame.KEYDOWN:
if event.key==pygame.K_UP:
self.turn(UP)
elif event.key==pygame.K_DOWN:
self.turn(DOWN)
elif event.key==pygame.K_LEFT:
self.turn(LEFT)
elif event.key==pygame.K_RIGHT:
self.turn(RIGHT)
elif event.key==pygame.K_ESCAPE:
pygame.quit()
sys.exit()
class Food(object):
def __init__(self):
self.position=(0,0)
self.color=(233,163,49)
self.randomize_position()
def randomize_position(self):
self.position=(random.randint(0,GRID_WIDTH-1)*GRIDSIZE,random.randint(0,GRID_HEIGHT-1)*GRIDSIZE)
def draw(self,surface):
r=pygame.Rect((self.position[0],self.position[1]),(GRIDSIZE,GRIDSIZE))
pygame.draw.rect(surface,self.color,r)
pygame.draw.rect(surface,(93,216,228),r,1)
def drawGrid(surface):
for y in range(0,int(GRID_HEIGHT)):
for x in range(0,int(GRID_WIDTH)):
if (x+y)%2==0:
r=pygame.Rect((x*GRIDSIZE,y*GRIDSIZE),(GRIDSIZE,GRIDSIZE))
pygame.draw.rect(surface,(200,200,200),r)
else:
rr=pygame.Rect((x*GRIDSIZE,y*GRIDSIZE),(GRIDSIZE,GRIDSIZE))
pygame.draw.rect(surface,(100,100,100),rr)
SCREEN_WIDTH=480
SCREEN_HEIGHT=480
GRIDSIZE=20
GRID_WIDTH=SCREEN_WIDTH/GRIDSIZE
GRID_HEIGHT=SCREEN_HEIGHT/GRIDSIZE
UP=(0,-1)
DOWN=(0,1)
LEFT=(-1,0)
RIGHT=(1,0)
def main():
pygame.init()
clock=pygame.time.Clock()
screen=pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT),0,32)
pygame.display.set_caption("Snake")
surface=pygame.Surface(screen.get_size())
surface=surface.convert()
drawGrid(surface)
snake=Snake()
food= Food()
myfont=pygame.font.SysFont("monospace",16)
score=0
while True:
clock.tick(10)
snake.handle_keys()
drawGrid(surface)
snake.move()
if snake.get_head_position()==food.position:
snake.length+=1
score+=1
food.randomize_position()
snake.draw(surface)
food.draw(surface)
screen.blit(surface,(0,0))
text=myfont.render("Score: {0}".format(score),1,(0,0,0))
screen.blit(text,(5,10))
pygame.display.update()
if __name__=="__main__":
main()