-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsnake.py
More file actions
132 lines (104 loc) · 3.82 KB
/
Copy pathsnake.py
File metadata and controls
132 lines (104 loc) · 3.82 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
121
122
123
124
125
126
127
128
129
130
131
132
import pygame
import time
import random
# Initialize Pygame
pygame.init()
# Constants
WHITE = (255, 255, 255)
YELLOW = (255, 255, 102)
BLACK = (0, 0, 0)
RED = (213, 50, 80)
GREEN = (0, 255, 0)
BLUE = (50, 153, 213)
WIDTH = 600
HEIGHT = 400
SNAKE_BLOCK = 20
SNAKE_SPEED = 15
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Snake Game')
clock = pygame.time.Clock()
font_style = pygame.font.SysFont("arial", 25)
score_font = pygame.font.SysFont("arial", 35)
high_score = 0
def show_score(score):
value = score_font.render(f"Score: {score} High Score: {high_score}", True, YELLOW)
screen.blit(value, [10, 10])
def draw_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(screen, GREEN, [x[0], x[1], snake_block, snake_block])
def game_loop():
global high_score
game_over = False
game_close = False
# Starting Position
x1 = WIDTH / 2
y1 = HEIGHT / 2
x1_change = 0
y1_change = 0
snake_List = []
Length_of_snake = 1
# Random Food Position
foodx = round(random.randrange(0, WIDTH - SNAKE_BLOCK) / 20.0) * 20.0
foody = round(random.randrange(0, HEIGHT - SNAKE_BLOCK) / 20.0) * 20.0
while not game_over:
while game_close == True:
screen.fill(BLUE)
msg = font_style.render("C-Play Again | Q-Quit", True, RED)
screen.blit(msg, [WIDTH / 3, HEIGHT / 3])
show_score(Length_of_snake - 1)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
game_loop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT and x1_change == 0:
x1_change = -SNAKE_BLOCK
y1_change = 0
elif event.key == pygame.K_RIGHT and x1_change == 0:
x1_change = SNAKE_BLOCK
y1_change = 0
elif event.key == pygame.K_UP and y1_change == 0:
y1_change = -SNAKE_BLOCK
x1_change = 0
elif event.key == pygame.K_DOWN and y1_change == 0:
y1_change = SNAKE_BLOCK
x1_change = 0
# Boundary Check
if x1 >= WIDTH or x1 < 0 or y1 >= HEIGHT or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
screen.fill(BLACK)
# Draw Food
pygame.draw.rect(screen, RED, [foodx, foody, SNAKE_BLOCK, SNAKE_BLOCK])
# Snake Movement Logic
snake_Head = [x1, y1]
snake_List.append(snake_Head)
if len(snake_List) > Length_of_snake:
del snake_List[0]
# Self-Collision Check
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
draw_snake(SNAKE_BLOCK, snake_List)
current_score = Length_of_snake - 1
if current_score > high_score:
high_score = current_score
show_score(current_score)
pygame.display.update()
# Eating Food Logic
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, WIDTH - SNAKE_BLOCK) / 20.0) * 20.0
foody = round(random.randrange(0, HEIGHT - SNAKE_BLOCK) / 20.0) * 20.0
Length_of_snake += 1
clock.tick(SNAKE_SPEED)
pygame.quit()
quit()
game_loop()