欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 用Python编写经典《贪吃蛇》小游戏

用Python编写经典《贪吃蛇》小游戏

2025/2/12 6:38:15 来源:https://blog.csdn.net/ThereIsNoCode/article/details/145575181  浏览:    关键词:用Python编写经典《贪吃蛇》小游戏

在这里插入图片描述

文章目录

    • 环境准备
      • 依赖库
    • 实现思路
      • 核心模块设计
    • 代码框架
    • 运行效果
    • 优化建议
    • 总结
      • 通过本框架可实现基础版贪吃蛇游戏,关键点在于:
      • 典型问题解决方案:

环境准备

依赖库

主要依赖

  • Python 3.6+
  • pygame 2.1.2 # 用于图形界面渲染

安装命令

pip install pygame

实现思路

核心模块设计

  1. 游戏初始化
    • 创建游戏窗口
    • 设置颜色常量(蛇身/食物/背景)
    • 初始化计分系统
  2. 蛇体控制
  # 伪代码示例def handle_movement():while True:监听键盘事件 ← 方向键控制更新蛇头坐标维护蛇身长度
  1. 食物生成
    • 随机坐标生成算法
    • 碰撞检测避免与蛇体重叠
  2. 碰撞检测
    • 边界碰撞检测
    • 自碰撞检测

代码框架

import pygame
import random
import sys# 游戏设置
SCREEN_WIDTH = 800  # 屏幕宽度
SCREEN_HEIGHT = 600  # 屏幕高度
GRID_SIZE = 20  # 网格大小
GRID_WIDTH = SCREEN_WIDTH // GRID_SIZE  # 网格宽度
GRID_HEIGHT = SCREEN_HEIGHT // GRID_SIZE  # 网格高度# 颜色定义
WHITE = (255, 255, 255)  # 白色
BLACK = (0, 0, 0)  # 黑色
RED = (255, 0, 0)  # 红色
GREEN = (0, 255, 0)  # 绿色
GRAY = (128, 128, 128)  # 灰色# 方向定义
UP = (0, -1)  # 向上
DOWN = (0, 1)  # 向下
LEFT = (-1, 0)  # 向左
RIGHT = (1, 0)  # 向右class Snake:def __init__(self):# 蛇的初始位置在屏幕中央self.positions = [((SCREEN_WIDTH // 2), (SCREEN_HEIGHT // 2))]# 随机选择一个初始方向self.direction = random.choice([UP, DOWN, LEFT, RIGHT])self.grow = False  # 是否增长self.is_over = False  # 游戏是否结束def get_head_position(self):# 获取蛇头的位置return self.positions[0]def turn(self, point):# 转向,但不能直接反向if (point[0] * -1, point[1] * -1) == self.direction:returnelse:self.direction = pointdef move(self):# 移动蛇的位置cur = self.get_head_position()x, y = self.directionnew = (((cur[0] + (x * GRID_SIZE)) % SCREEN_WIDTH), (cur[1] + (y * GRID_SIZE)) % SCREEN_HEIGHT)if new in self.positions[2:]:# 如果蛇头碰到身体,游戏结束self.game_over()else:self.positions.insert(0, new)if not self.grow:self.positions.pop()else:self.grow = Falsedef game_over(self):# 游戏结束self.is_over = Truedef reset(self):# 重置蛇的位置和方向self.positions = [((SCREEN_WIDTH // 2), (SCREEN_HEIGHT // 2))]self.direction = random.choice([UP, DOWN, LEFT, RIGHT])self.grow = Falsedef grow_snake(self):# 让蛇增长self.grow = Truedef draw(self, surface):# 绘制蛇for p in self.positions:r = pygame.Rect((p[0], p[1]), (GRID_SIZE, GRID_SIZE))pygame.draw.rect(surface, GREEN, r)pygame.draw.rect(surface, BLACK, r, 1)class Food:def __init__(self):# 初始化食物位置和颜色self.position = (0, 0)self.color = REDself.randomize_position()def randomize_position(self):# 随机生成食物位置self.position = (random.randint(0, GRID_WIDTH - 1) * GRID_SIZE, random.randint(0, GRID_HEIGHT - 1) * GRID_SIZE)def draw(self, surface):# 绘制食物r = pygame.Rect((self.position[0], self.position[1]), (GRID_SIZE, GRID_SIZE))pygame.draw.rect(surface, self.color, r)pygame.draw.rect(surface, BLACK, r, 1)def main():pygame.init()clock = pygame.time.Clock()screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), 0, 32)surface = pygame.Surface(screen.get_size())surface = surface.convert()snake = Snake()food = Food()myfont = pygame.font.SysFont("monospace", 16)while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:snake.turn(UP)elif event.key == pygame.K_DOWN:snake.turn(DOWN)elif event.key == pygame.K_LEFT:snake.turn(LEFT)elif event.key == pygame.K_RIGHT:snake.turn(RIGHT)snake.move()if snake.is_over:breakif snake.get_head_position() == food.position:snake.grow_snake()food.randomize_position()# snake.grow_snake()surface.fill(WHITE)snake.draw(surface)food.draw(surface)screen.blit(surface, (0, 0))text = myfont.render("Score {0}".format(len(snake.positions)), 1, BLACK)screen.blit(text, (5, 10))pygame.display.update()clock.tick(20)myfont = pygame.font.SysFont("monospace", 50)myfont.set_bold(True)myfont.set_italic(True)text = myfont.render("Game Over!", 1, BLACK, GRAY)screen.blit(text, (300, 300))pygame.display.update()pygame.time.wait(2000)if __name__ == "__main__":main()

运行效果

运行截图在这里插入图片描述

优化建议

难度系统:通过得分逐步提升移动速度
音效增强:添加进食音效和背景音乐
存档功能:记录最高分数到本地文件
皮肤系统:允许自定义蛇体外观

总结

通过本框架可实现基础版贪吃蛇游戏,关键点在于:

  • 合理设计游戏循环时序
  • 精确的碰撞检测实现
  • 高效的画面刷新机制

完整实现代码约120-150行,建议在以下环境测试:

   操作系统:Windows/MacOS/Linux显示器分辨率:1920x1080(向下兼容)开发提示:调试时建议先关闭画面渲染,使用控制台打印坐标进行逻辑验证

典型问题解决方案:

# 常见问题1:方向键反方向无效处理
```python
if event.key == pygame.K_UP and current_direction != 'DOWN':direction = 'UP'#其他方向同理#...

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com