
## 代码 |
import random |
import pygame |
# 定义窗口的大小 |
# PyGame定义坐标系原点在左上角 |
WINDOW_WIDTH = 500 |
WINDOW_HEIGHT = 500 |
# 定义几个颜色 |
RED = (255, 0, 0) |
BLUE = (0, 0, 255) |
GREEN = (0, 255, 0) |
BLACK = (0, 0, 0) |
# 定义贪吃蛇的移动速度 |
SPEED = 1.0 |
# 定义一个记录游戏是否结束的变量 |
game_over = False |
# 定义贪吃蛇的起始位置和方向 |
snake_left = 10 |
snake_top = 10 |
snake_direction = 'right' |
# 定义贪吃蛇的身体的列表 |
snake_list = [] |
# 定义食物的位置 |
food_left = random.randint(5, WINDOW_WIDTH - 5) |
food_top = random.randint(5, WINDOW_HEIGHT - 5) |
# 初始化PyGame模块 |
pygame.init() |
# 设置窗口的大小 |
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) |
# 设置游戏窗口的标题 |
pygame.display.set_caption('贪吃蛇游戏') |
# 设置游戏的速度 |
clock = pygame.time.Clock() |
# 定义贪吃蛇的长度 |
snake_len = 50 |
# 开始游戏的主循环 |
while True: |
# 当游戏结束的时候,退出循环 |
if game_over: |
break |
# 每次循环时都会重新绘制窗口 |
screen.fill(BLACK) |
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_direction = 'left' |
elif event.key == pygame.K_RIGHT: |
snake_direction = 'right' |
elif event.key == pygame.K_UP: |
snake_direction = 'up' |
elif event.key == pygame.K_DOWN: |
snake_direction = 'down' |
# 根据方向移动贪吃蛇的坐标 |
if snake_direction == 'left': |
snake_left -= SPEED |
elif snake_direction == 'right': |
snake_left += SPEED |
elif snake_direction == 'up': |
snake_top -= SPEED |
elif snake_direction == 'down': |
snake_top += SPEED |
# 贪吃蛇的坐标添加到列表中 |
snake_list.append((snake_left, snake_top)) |
# 如果贪吃蛇的长度大于最大长度 |
if len(snake_list) > snake_len: |
# 则删除最开始的坐标 |
del snake_list[0] |
# 绘制贪吃蛇的身体 |
for c_pos in snake_list: |
pygame.draw.rect(screen, GREEN, (c_pos[0], c_pos[1], 10, 10)) |
# 如果贪吃蛇的坐标和食物的坐标重合,考虑误差±10像素 |
if abs(snake_left - food_left) < 10 and abs(snake_top - food_top) < 10: |
# 重新随机一个食物的坐标 |
food_left = random.randint(5, WINDOW_WIDTH - 5) |
food_top = random.randint(5, WINDOW_HEIGHT - 5) |
snake_len += SPEED |
# 绘制食物 |
pygame.draw.rect(screen, RED, (food_left, food_top, 10, 10)) |
# 如果贪吃蛇碰到边界 |
if snake_left < 0 or snake_left > WINDOW_WIDTH or snake_top < 0 or snake_top > WINDOW_HEIGHT: |
game_over = True |
# 如果贪吃蛇碰到自身的身体 |
for n_pos in snake_list[:-1]: |
if n_pos[0] == snake_left and n_pos[1] == snake_top: |
game_over = True |
# 绘制文字让用户知晓游戏进度 |
score = len(snake_list) |
font = pygame.font.SysFont(None, 30) |
label = font.render('Score: {}'.format(score), 1, RED) |
screen.blit(label, (WINDOW_WIDTH / 2 - 25, 20)) |
# 刷新屏幕 |
pygame.display.flip() |
# 控制游戏的速度 |
clock.tick(200) |
# 退出游戏 |
pygame.quit() |



