-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
124 lines (99 loc) · 4.8 KB
/
main.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
import pygame
from pygame.math import Vector2
from fruit import FRUIT
from snake import SNAKE
from constants import DIRECTIONS
import sys
pygame.init()
# Game Global Variables
cell_size = 40
cell_number = 20
screen = pygame.display.set_mode((cell_size * cell_number, cell_size * cell_number)) # creating a display surface
clock = pygame.time.Clock()
# Game User-defined events
SCREEN_UPDATE = pygame.USEREVENT
pygame.time.set_timer(SCREEN_UPDATE, 150)
# Main game class
class GAME:
def __init__(self, display):
self.fruit = FRUIT(cell_size, cell_number)
self.snake = SNAKE(cell_size, cell_number)
self.game_font = pygame.font.Font('Fonts/nice_sugar/Nice Sugar.ttf', 25)
self.grass_border_asset = pygame.image.load('Graphics/grass_border.png')
self.display = display
def update(self):
self.check_collision()
self.snake.move_snake()
self.check_gameover()
def draw_elements(self):
self.draw_grass()
self.fruit.draw_fruit(screen)
self.snake.draw_snake(screen)
self.draw_grass_border()
self.draw_score()
def check_collision(self):
if self.snake.get_head_pos() == self.fruit.pos:
# eat the fruit i.e plant a new fruit at another place
self.fruit.set_new_fruit_pos()
# make the snake larger
self.snake.set_new_block_flag()
def check_gameover(self):
if self.snake.get_head_pos() in self.snake.body_cells[1:]:
pygame.quit()
sys.exit()
def draw_grass(self):
grass_color = (167, 209, 61)
for row in range(cell_number):
if row % 2 != 0:
for col in range(cell_number):
if col % 2 != 0:
grass_rect = pygame.Rect(int(col * cell_size), int(row * cell_size), cell_size, cell_size)
pygame.draw.rect(self.display, grass_color, grass_rect)
else:
for col in range(cell_number):
if col % 2 == 0:
grass_rect = pygame.Rect(int(col * cell_size), int(row * cell_size), cell_size, cell_size)
pygame.draw.rect(self.display, grass_color, grass_rect)
def draw_grass_border(self):
for i in range(cell_number):
grass_rect = pygame.Rect(int(i * cell_size), int(0 * cell_size), cell_size, cell_size)
self.display.blit(self.grass_border_asset, grass_rect)
grass_rect = pygame.Rect(int(0 * cell_size), int(i * cell_size), cell_size, cell_size)
self.display.blit(self.grass_border_asset, grass_rect)
grass_rect = pygame.Rect(int(i * cell_size), int((cell_number-1) * cell_size), cell_size, cell_size)
self.display.blit(self.grass_border_asset, grass_rect)
grass_rect = pygame.Rect(int((cell_number-1) * cell_size), int(i * cell_size), cell_size, cell_size)
self.display.blit(self.grass_border_asset, grass_rect)
def draw_score(self):
score_text = str(int(len(self.snake.body_cells) - 3) * 10)
score_surface = self.game_font.render(score_text, True, (56, 74, 12))
score_x = int(cell_size * cell_number - 60)
score_y = int(cell_size * cell_number - 50)
score_rect = score_surface.get_rect(center=(score_x, score_y))
tomato_rect = self.fruit.fruit_asset.get_rect(midright=(score_rect.left, score_rect.centery))
score_bg_rect = pygame.Rect(tomato_rect.left, tomato_rect.top - 3, tomato_rect.width + score_rect.width + 6, tomato_rect.height + 3)
pygame.draw.rect(self.display, (200, 200, 200), score_bg_rect)
self.display.blit(score_surface, score_rect)
self.display.blit(self.fruit.fruit_asset, tomato_rect)
pygame.draw.rect(self.display, pygame.Color('black'), score_bg_rect, 2)
game = GAME(screen)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == SCREEN_UPDATE:
game.update()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
game.snake.set_snake_direction(DIRECTIONS['UP'])
elif event.key == pygame.K_DOWN:
game.snake.set_snake_direction(DIRECTIONS['DOWN'])
elif event.key == pygame.K_LEFT:
game.snake.set_snake_direction(DIRECTIONS['LEFT'])
elif event.key == pygame.K_RIGHT:
game.snake.set_snake_direction(DIRECTIONS['RIGHT'])
screen.fill((175, 215, 70))
game.draw_elements()
pygame.display.update()
clock.tick(60) # Running at 60 fps as a maximum rate