-
Notifications
You must be signed in to change notification settings - Fork 0
/
SnakeGame.py
89 lines (70 loc) · 3.07 KB
/
SnakeGame.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
import sys
import pygame
from Constants import *
from Snake import Snake
from SnakeBot import SnakeBot
from Utils import new_food_position, will_snake_eat_the_food, is_game_over
class Game:
def __init__(self):
pygame.init()
pygame.display.set_caption("Snake Game")
self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
self.snake = Snake()
self.food = new_food_position()
self.score = 0
self.clock = pygame.time.Clock()
self.snakeBot = SnakeBot()
def draw_food(self, food, screen):
pygame.draw.rect(screen, WHITE,
(food[0] * GRID_SIZE - 1, food[1] * GRID_SIZE - 1, GRID_SIZE - 1, GRID_SIZE - 1))
def draw_snake_body(self, snake, screen):
for key, segment in enumerate(snake.segments):
pygame.draw.rect(screen, GREEN,
(segment[0] * GRID_SIZE - 1, segment[1] * GRID_SIZE - 1, GRID_SIZE - 1, GRID_SIZE - 1))
if key == 0:
pygame.draw.rect(screen, RED,
(segment[0] * GRID_SIZE - 1, segment[1] * GRID_SIZE - 1, GRID_SIZE - 1, GRID_SIZE - 1))
def human_controls(self):
key_processed = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.game_over()
elif event.type == pygame.KEYDOWN and not key_processed:
if event.key == pygame.K_UP and self.snake.direction != DOWN:
self.snake.direction = UP
elif event.key == pygame.K_DOWN and self.snake.direction != UP:
self.snake.direction = DOWN
elif event.key == pygame.K_LEFT and self.snake.direction != RIGHT:
self.snake.direction = LEFT
elif event.key == pygame.K_RIGHT and self.snake.direction != LEFT:
self.snake.direction = RIGHT
key_processed = True
def game_over(self):
pygame.quit()
sys.exit()
def start_game(self):
self.screen.fill(BLACK)
self.draw_snake_body(self.snake, self.screen)
self.draw_food(self.food, self.screen)
pygame.display.flip()
directions = []
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.game_over()
if not directions:
directions = self.snakeBot.decide_dfs(self.snake, self.food)
self.snake.direction = directions.pop()
self.snake.move()
if will_snake_eat_the_food(self.snake, self.food):
directions = self.snakeBot.decide_dfs(self.snake, self.food)
self.snake.add_segment()
self.score += 1
self.food = new_food_position()
if is_game_over(self.snake):
self.game_over()
self.screen.fill(BLACK)
self.draw_snake_body(self.snake, self.screen)
self.draw_food(self.food, self.screen)
pygame.display.flip()
self.clock.tick(GAME_SPEED)