[python]代码库
## 代码
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()
[代码运行效果截图]