-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.py
More file actions
128 lines (100 loc) · 3.72 KB
/
Copy pathgame.py
File metadata and controls
128 lines (100 loc) · 3.72 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
import pygame
import time
import random
# Initialize pygame
pygame.init()
# Screen dimensions
WIDTH, HEIGHT = 600, 400
# Colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (213, 50, 80)
GREEN = (0, 255, 0)
BLUE = (50, 153, 213)
# Initialize screen
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Snake Game")
# Clock to control game speed
clock = pygame.time.Clock()
# Snake settings
SNAKE_BLOCK = 10
SNAKE_SPEED = 15
# Font styles
font_style = pygame.font.SysFont("bahnschrift", 25)
score_font = pygame.font.SysFont("comicsansms", 35)
# High score initialization
high_score = 0
def show_score(current_score, highest_score):
value = score_font.render(f"Score: {current_score} High Score: {highest_score}", True, GREEN)
screen.blit(value, [10, 10])
def draw_snake(snake_block, snake_list):
for block in snake_list:
pygame.draw.rect(screen, BLUE, [block[0], block[1], snake_block, snake_block])
def message(msg, color):
mesg = font_style.render(msg, True, color)
screen.blit(mesg, [WIDTH / 6, HEIGHT / 3])
def game_loop():
global high_score # To modify the high score globally
game_over = False
game_close = False
# Initial position of the snake
x1, y1 = WIDTH / 2, HEIGHT / 2
x1_change, y1_change = 0, 0
snake_list = []
snake_length = 1
# Food position
food_x = round(random.randrange(0, WIDTH - SNAKE_BLOCK) / 10.0) * 10.0
food_y = round(random.randrange(0, HEIGHT - SNAKE_BLOCK) / 10.0) * 10.0
while not game_over:
while game_close:
screen.fill(BLACK)
message("You Lost! Press C-Play Again or Q-Quit", RED)
show_score(snake_length - 1, high_score)
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, y1_change = -SNAKE_BLOCK, 0
elif event.key == pygame.K_RIGHT and x1_change == 0:
x1_change, y1_change = SNAKE_BLOCK, 0
elif event.key == pygame.K_UP and y1_change == 0:
x1_change, y1_change = 0, -SNAKE_BLOCK
elif event.key == pygame.K_DOWN and y1_change == 0:
x1_change, y1_change = 0, SNAKE_BLOCK
if x1 >= WIDTH or x1 < 0 or y1 >= HEIGHT or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
screen.fill(BLACK)
pygame.draw.rect(screen, GREEN, [food_x, food_y, SNAKE_BLOCK, SNAKE_BLOCK])
snake_head = [x1, y1]
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
for block in snake_list[:-1]:
if block == snake_head:
game_close = True
draw_snake(SNAKE_BLOCK, snake_list)
show_score(snake_length - 1, high_score)
pygame.display.update()
if x1 == food_x and y1 == food_y:
food_x = round(random.randrange(0, WIDTH - SNAKE_BLOCK) / 10.0) * 10.0
food_y = round(random.randrange(0, HEIGHT - SNAKE_BLOCK) / 10.0) * 10.0
snake_length += 1
# Update the high score
if snake_length - 1 > high_score:
high_score = snake_length - 1
clock.tick(SNAKE_SPEED)
pygame.quit()
quit()
# Run the game
game_loop()