-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.py
More file actions
73 lines (65 loc) · 2.57 KB
/
Copy pathgame.py
File metadata and controls
73 lines (65 loc) · 2.57 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
import pygame
from snake import Snake
from food import Food
class Game:
def __init__(self, width=300, height=300, cell_size=20, speed=5):
pygame.init()
self.width = width
self.height = height
self.cell_size = cell_size
self.grid_w = width // cell_size
self.grid_h = height // cell_size
self.screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Snake (OOP, Pygame)")
self.clock = pygame.time.Clock()
self.speed = speed
start = (self.grid_w // 2, self.grid_h // 2)
self.snake = Snake(start)
self.food = Food(self.grid_w, self.grid_h, self.snake.get_body())
self.score = 0
self.font = pygame.font.SysFont(None, 24)
self.running = True
def handle_input(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.snake.set_direction((0, -1))
elif event.key == pygame.K_DOWN:
self.snake.set_direction((0, 1))
elif event.key == pygame.K_LEFT:
self.snake.set_direction((-1, 0))
elif event.key == pygame.K_RIGHT:
self.snake.set_direction((1, 0))
def update(self):
self.snake.move()
head = self.snake.get_head()
# Wrap-around at edges: appear on opposite side
wrapped_head = (head[0] % self.grid_w, head[1] % self.grid_h)
if wrapped_head != head:
self.snake.body[0] = wrapped_head
head = wrapped_head
if self.snake.collides_self():
self.running = False
return
if self.snake.get_head() == self.food.position:
self.snake.grow()
self.score += 1
# Gradually increase speed with each food eaten, capped for playability
self.speed = min(self.speed + 0.5, 30)
self.food.randomize(self.snake.get_body())
def draw(self):
self.screen.fill((0, 0, 0))
self.snake.draw(self.screen, self.cell_size)
self.food.draw(self.screen, self.cell_size)
score_surf = self.font.render(f"Score: {self.score}", True, (255, 255, 255))
self.screen.blit(score_surf, (5, 5))
pygame.display.flip()
def run(self):
while self.running:
self.handle_input()
self.update()
self.draw()
self.clock.tick(self.speed)
pygame.quit()