从零开始用 Python 打造经典贪吃蛇游戏:代码+详解
【摘要】 贪吃蛇是一个经典的益智游戏。它不仅容易上手,也是学习 Python 游戏开发的好入门项目。本文将通过使用 pygame 模块实现一个简单的贪吃蛇游戏,并进行详细讲解。 1. 安装 pygame在开始之前,需要确保安装了 pygame 模块。使用以下命令安装:pip install pygame 2. 完整代码以下是贪吃蛇游戏的完整实现代码:import pygameimport random...
贪吃蛇是一个经典的益智游戏。它不仅容易上手,也是学习 Python 游戏开发的好入门项目。本文将通过使用 pygame 模块实现一个简单的贪吃蛇游戏,并进行详细讲解。
1. 安装 pygame
在开始之前,需要确保安装了 pygame 模块。使用以下命令安装:
pip install pygame
2. 完整代码
以下是贪吃蛇游戏的完整实现代码:
import pygame
import random
import time
# 初始化 pygame
pygame.init()
# 屏幕大小
WIDTH, HEIGHT = 600, 400
CELL_SIZE = 20
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 创建屏幕
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('贪吃蛇')
# 初始化时钟
clock = pygame.time.Clock()
def draw_snake(snake_body):
"""绘制蛇的身体"""
for segment in snake_body:
pygame.draw.rect(screen, GREEN, pygame.Rect(segment[0], segment[1], CELL_SIZE, CELL_SIZE))
def show_message(text, color, size, position):
"""显示信息"""
font = pygame.font.Font(None, size)
message = font.render(text, True, color)
screen.blit(message, position)
def main():
# 初始化蛇
snake_pos = [100, 50] # 蛇头初始位置
snake_body = [[100, 50], [80, 50], [60, 50]] # 蛇身体
direction = 'RIGHT' # 蛇头初始方向
change_to = direction
# 初始化食物
food_pos = [random.randrange(1, WIDTH // CELL_SIZE) * CELL_SIZE,
random.randrange(1, HEIGHT // CELL_SIZE) * CELL_SIZE]
food_spawn = True
# 初始化分数
score = 0
running = True
while running:
# 监听按键事件
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and direction != 'DOWN':
change_to = 'UP'
elif event.key == pygame.K_DOWN and direction != 'UP':
change_to = 'DOWN'
elif event.key == pygame.K_LEFT and direction != 'RIGHT':
change_to = 'LEFT'
elif event.key == pygame.K_RIGHT and direction != 'LEFT':
change_to = 'RIGHT'
direction = change_to
# 更新蛇头位置
if direction == 'UP':
snake_pos[1] -= CELL_SIZE
elif direction == 'DOWN':
snake_pos[1] += CELL_SIZE
elif direction == 'LEFT':
snake_pos[0] -= CELL_SIZE
elif direction == 'RIGHT':
snake_pos[0] += CELL_SIZE
# 增加蛇头
snake_body.insert(0, list(snake_pos))
# 检测是否吃到食物
if snake_pos == food_pos:
score += 10
food_spawn = False
else:
snake_body.pop()
if not food_spawn:
food_pos = [random.randrange(1, WIDTH // CELL_SIZE) * CELL_SIZE,
random.randrange(1, HEIGHT // CELL_SIZE) * CELL_SIZE]
food_spawn = True
# 游戏结束条件
if (
snake_pos[0] < 0 or snake_pos[0] >= WIDTH or
snake_pos[1] < 0 or snake_pos[1] >= HEIGHT
):
running = False
# 检测蛇是否碰到自己
for block in snake_body[1:]:
if snake_pos == block:
running = False
# 绘制屏幕
screen.fill(BLACK)
draw_snake(snake_body)
pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], CELL_SIZE, CELL_SIZE))
show_message(f'Score: {score}', WHITE, 20, (10, 10))
pygame.display.update()
clock.tick(10)
# 游戏结束信息
screen.fill(BLACK)
show_message("Game Over!", RED, 50, (WIDTH // 2 - 100, HEIGHT // 2 - 30))
show_message(f"Your Score: {score}", WHITE, 30, (WIDTH // 2 - 90, HEIGHT // 2 + 20))
pygame.display.update()
time.sleep(3)
pygame.quit()
if __name__ == "__main__":
main()
3. 代码讲解
3.1 窗口设置
通过 pygame.display.set_mode() 创建窗口,WIDTH 和 HEIGHT 定义屏幕大小,CELL_SIZE 定义单元格大小,用于蛇的移动和食物生成。
3.2 蛇的定义和绘制
蛇通过一个列表 snake_body 存储位置,每个元素是 [x, y] 坐标。draw_snake() 函数绘制蛇的每个部分。
3.3 方向控制
通过监听键盘事件 (pygame.KEYDOWN) 控制蛇的方向变化。用 change_to 确保快速按键不会导致蛇逆行。
3.4 食物生成和检测
食物的位置由 food_pos 确定,使用 random 随机生成。蛇吃到食物后增长身体并刷新食物位置。
3.5 游戏结束条件
蛇头碰到边界。
蛇头碰到自身。
3.6 显示分数
使用 pygame.font.Font() 绘制得分。
4. 运行效果
游戏运行后:
- 蛇会按照指定方向移动。
- 吃到红色方块(食物)后,蛇会变长,分数增加。
- 蛇碰到屏幕边界或自身后游戏结束。
5. 总结
这段代码使用了 pygame 的核心功能,如绘制图形、监听事件和更新屏幕等。通过学习此项目,你可以掌握如何用 Python 开发一个完整的游戏,并进一步扩展功能,如增加障碍物、调整游戏速度、设计多关卡等。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)