File size: 3,806 Bytes
5a64e21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
133
134
135
136
137
138
139
140
import pygame
import time
import random

pygame.init()

# Screen dimensions
screen_width = 800
screen_height = 600

# Colors
white = (255, 255, 255)
red = (213, 50, 80)
green = (0, 255, 0)
black = (0, 0, 0)

# Snake block size and speed
block_size = 20
snake_speed = 15

# Create the display
dis = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Snake Game")


# Snake function to draw the snake
def our_snake(block_size, snake_list):
    for x in snake_list:
        pygame.draw.rect(dis, green, [x[0], x[1], block_size, block_size])


# Game loop
def game_loop():
    game_over = False
    game_close = False

    # Initial position of the snake
    snake_x = screen_width / 2
    snake_y = screen_height / 2

    # Initial speed of the snake
    snake_x_change = 0
    snake_y_change = 0

    # Snake body (a list of coordinates)
    snake_list = []
    length_of_snake = 1

    # Initial position of the food
    food_x = (
        round(random.randrange(0, screen_width - block_size) / block_size) * block_size
    )
    food_y = (
        round(random.randrange(0, screen_height - block_size) / block_size) * block_size
    )

    while not game_over:
        while game_close == True:
            dis.fill(white)
            font_style = pygame.font.SysFont(None, 50)
            message = font_style.render(
                "You Lost! Press Q-Quit or C-Play Again", True, black
            )
            dis.blit(message, [screen_width / 6, screen_height / 3])

            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:
                    snake_x_change = -block_size
                    snake_y_change = 0
                elif event.key == pygame.K_RIGHT:
                    snake_x_change = block_size
                    snake_y_change = 0
                elif event.key == pygame.K_UP:
                    snake_y_change = -block_size
                    snake_x_change = 0
                elif event.key == pygame.K_DOWN:
                    snake_y_change = block_size
                    snake_x_change = 0

        if (
            snake_x >= screen_width
            or snake_x < 0
            or snake_y >= screen_height
            or snake_y < 0
        ):
            game_close = True

        snake_x += snake_x_change
        snake_y += snake_y_change
        dis.fill(white)

        pygame.draw.rect(dis, red, [food_x, food_y, block_size, block_size])
        snake_head = []
        snake_head.append(snake_x)
        snake_head.append(snake_y)
        snake_list.append(snake_head)
        if len(snake_list) > length_of_snake:
            del snake_list[0]

        for x in snake_list[:-1]:
            if x == snake_head:
                game_close = True

        our_snake(block_size, snake_list)
        pygame.display.update()

        if snake_x == food_x and snake_y == food_y:
            food_x = (
                round(random.randrange(0, screen_width - block_size) / block_size)
                * block_size
            )
            food_y = (
                round(random.randrange(0, screen_height - block_size) / block_size)
                * block_size
            )
            length_of_snake += 1

        pygame.display.update()

        pygame.time.Clock().tick(snake_speed)

    pygame.quit()
    quit()


game_loop()