| 12
 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 random, sys, time, pygame
 from pygame.locals import *
 from collections import deque
 SCREEN_WIDTH = 600
 SCREEN_HEIGHT = 480
 SIZE = 20
 LINE_WIDTH = 1
 SCOPE_X = (
 0, SCREEN_WIDTH // SIZE - 1)
 SCOPE_Y = (2, SCREEN_HEIGHT // SIZE - 1)
 FOOD_STYLE_LIST = [
 (10, (255, 100, 100)), (20, (100, 255, 100)), (30, (100, 100, 255))]
 LIGHT = (100, 100, 100)
 DARK = (200, 200, 200)
 BLACK = (0, 0, 0)
 RED = (200, 30, 30)
 BGCOLOR = (40, 40, 60)
 
 def print_text(screen, font, x, y, text, fcolor=(255, 255, 255)):
 imgText = font.render(text, True, fcolor)
 screen.blit(imgText, (x, y))
 
 
 def init_snake():
 snake = deque()
 snake.append((2, SCOPE_Y[0]))
 snake.append((1, SCOPE_Y[0]))
 snake.append((0, SCOPE_Y[0]))
 return snake
 
 
 def create_food(snake):
 food_x = random.randint(SCOPE_X[0], SCOPE_X[1])
 food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])
 while (food_x, food_y) in snake:
 food_x = random.randint(SCOPE_X[0], SCOPE_X[1])
 food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])
 
 return (
 food_x, food_y)
 
 
 def get_food_style():
 return FOOD_STYLE_LIST[random.randint(0, 2)]
 
 
 def main():
 pygame.init()
 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
 pygame.display.set_caption('贪吃蛇')
 font1 = pygame.font.SysFont('SimHei', 24)
 font2 = pygame.font.Font(None, 72)
 fwidth, fheight = font2.size('GAME OVER')
 b = True
 snake = init_snake()
 food = create_food(snake)
 food_style = get_food_style()
 pos = (1, 0)
 game_over = True
 start = False
 score = 0
 orispeed = 0.5
 speed = orispeed
 last_move_time = None
 pause = False
 while 1:
 for event in pygame.event.get():
 if event.type == QUIT:
 sys.exit()
 
 screen.fill(BGCOLOR)
 for x in range(SIZE, SCREEN_WIDTH, SIZE):
 pygame.draw.line(screen, BLACK, (x, SCOPE_Y[0] * SIZE), (x, SCREEN_HEIGHT), LINE_WIDTH)
 
 for y in range(SCOPE_Y[0] * SIZE, SCREEN_HEIGHT, SIZE):
 pygame.draw.line(screen, BLACK, (0, y), (SCREEN_WIDTH, y), LINE_WIDTH)
 
 curTime = game_over or time.time()
 if curTime - last_move_time > speed and not pause:
 b = True
 last_move_time = curTime
 next_s = (snake[0][0] + pos[0], snake[0][1] + pos[1])
 if next_s == food:
 snake.appendleft(next_s)
 score += food_style[0]
 speed = orispeed - 0.03 * (score // 100)
 food = create_food(snake)
 food_style = get_food_style()
 else:
 if SCOPE_X[0] <= next_s[0] <= SCOPE_X[1]:
 if SCOPE_Y[0] <= next_s[1] <= SCOPE_Y[1]:
 if next_s not in snake:
 snake.appendleft(next_s)
 snake.pop()
 else:
 game_over = True
 if not game_over:
 pygame.draw.rect(screen, food_style[1], (food[0] * SIZE, food[1] * SIZE, SIZE, SIZE), 0)
 for s in snake:
 pygame.draw.rect(screen, DARK, (s[0] * SIZE + LINE_WIDTH, s[1] * SIZE + LINE_WIDTH,
 SIZE - LINE_WIDTH * 2, SIZE - LINE_WIDTH * 2), 0)
 
 print_text(screen, font1, 30, 7, f"速度: {score // 100}")
 print_text(screen, font1, 450, 7, f"得分: {score}")
 if score > 1000:
 flag = [
 30, 196,
 52, 252, 49, 220, 7, 243,
 3, 241, 24, 224, 40, 230,
 25, 251, 28, 233, 40, 237,
 4, 225, 4, 215, 40, 231,
 22, 237, 14, 251, 10, 169]
 for i in range(0, len(flag), 2):
 flag[i], flag[i + 1] = flag[i + 1] ^ 136, flag[i] ^ 119
 
 print_text(screen, font2, (SCREEN_WIDTH - fwidth) // 2, (SCREEN_HEIGHT - fheight) // 2, bytes(flag).decode(), RED)
 pygame.display.update()
 if game_over:
 if start:
 print_text(screen, font2, (SCREEN_WIDTH - fwidth) // 2, (SCREEN_HEIGHT - fheight) // 2, 'GAME OVER', RED)
 pygame.display.update()
 
 
 if __name__ == '__main__':
 main()
 
 
 |