

python小游戏实战:打造一款视觉精美的贪吃蛇小游戏
python小游戏实战:打造一款视觉精美的贪吃蛇小游戏,贪吃蛇游戏作为经典的休闲小游戏,凭借简单的规则和极强的趣味性,深受大众喜爱。本次实战将使用 Python 结合
pygame库,打造一款不仅玩法经典,还拥有精美视觉效果的贪吃蛇小游戏。通过本教程,你不仅能掌握游戏开发的基本流程,还能学习到图形渲染、事件处理、碰撞检测等核心知识点,非常适合 Python 初学者入门游戏开发领域。

一、前言
Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。


🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。
🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。
🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。
🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。
🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。
✨ 正文开始
二、开发环境准备
2.1 所需工具与库
- Python 版本:建议使用 Python 3.7 及以上版本,确保
pygame库能正常兼容。 - 核心库:
pygame,一款专门用于开发 2D 游戏的 Python 库,提供了图形绘制、声音播放、事件监听等丰富功能,能快速实现游戏的核心逻辑。
2.2 库的安装步骤
打开电脑的命令提示符(Windows)或终端(Mac/Linux),输入以下命令安装 pygame 库:
pip install pygame
安装完成后,可在 Python 交互环境中输入 import pygame 进行验证,若未报错,则说明库安装成功。
三、游戏整体设计思路
3.1 游戏核心逻辑
- 蛇的移动:蛇由多个方块组成,头部控制移动方向,身体跟随头部移动,每次移动一格。
- 食物生成:食物随机生成在游戏窗口内,且不能与蛇的身体重叠。
- 碰撞检测:
- 蛇头撞到游戏窗口边界,游戏结束;
- 蛇头撞到自己的身体,游戏结束;
- 蛇头撞到食物,蛇的长度增加一节,分数增加,同时重新生成新的食物。
- 分数统计:每吃到一个食物,分数增加固定数值,游戏结束时显示最终分数。
3.2 视觉效果设计
- 窗口与背景:设计合适尺寸的游戏窗口,使用渐变或纯色背景,搭配轻微的网格线条,提升画面层次感。
- 蛇的样式:蛇头与蛇身使用不同颜色区分,蛇头可添加简单图形(如圆形)突出,移动时添加轻微的动画效果(如颜色渐变)。
- 食物样式:食物使用鲜艳的颜色(如红色),设计成圆形或其他与蛇区分明显的形状,增强视觉吸引力。
- 文字与UI:分数显示采用清晰的字体,游戏结束时显示“游戏结束”和“最终分数”,并提供“重新开始”的提示。
四、代码实现步骤
4.1 初始化游戏与设置基础参数
首先导入 pygame 库并初始化,设置游戏窗口大小、标题、帧率等基础参数,同时定义常用颜色(如蛇头色、蛇身色、食物色、背景色等)。
import pygame
import random
import sys
# 初始化pygame
pygame.init()
# 游戏窗口设置
WIDTH, HEIGHT = 800, 600 # 窗口宽高
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("精美贪吃蛇小游戏")
# 颜色定义(使用RGB值)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
SNAKE_HEAD_COLOR = (0, 255, 0) # 蛇头绿色
SNAKE_BODY_COLOR = (0, 200, 0) # 蛇身深绿色
FOOD_COLOR = (255, 0, 0) # 食物红色
BACKGROUND_COLOR = (230, 230, 250) # 背景淡紫色
# 游戏基础参数
BLOCK_SIZE = 20 # 蛇和食物的方块大小
SPEED = 15 # 游戏帧率(控制蛇的移动速度)
# 初始化时钟(控制游戏帧率)
clock = pygame.time.Clock()
# 字体设置(用于显示分数和文字)
font = pygame.font.SysFont("Microsoft YaHei", 35)
4.2 定义核心功能函数
4.2.1 分数显示函数
用于在游戏窗口的指定位置显示当前分数,字体颜色为黑色,位置在窗口左上角。
def show_score(score):
"""显示当前分数"""
score_text = font.render(f"分数: {score}", True, BLACK)
screen.blit(score_text, [10, 10]) # 将分数文字绘制到窗口
4.2.2 绘制蛇的函数
根据蛇的坐标列表,分别绘制蛇头和蛇身,蛇头使用圆形(更突出),蛇身使用矩形,增强视觉区分度。
def draw_snake(block_size, snake_list):
"""绘制贪吃蛇"""
# 绘制蛇身(矩形)
for segment in snake_list[:-1]:
pygame.draw.rect(screen, SNAKE_BODY_COLOR, [segment[0], segment[1], block_size, block_size])
# 绘制蛇头(圆形,与蛇身区分)
head = snake_list[-1]
pygame.draw.circle(screen, SNAKE_HEAD_COLOR,
(head[0] + block_size // 2, head[1] + block_size // 2),
block_size // 2)
4.2.3 生成食物函数
随机生成食物的坐标,确保食物不会出现在蛇的身体上,且坐标是 BLOCK_SIZE 的整数倍(与蛇的移动格子对齐)。
def generate_food(block_size, width, height, snake_list):
"""生成食物(避免与蛇身重叠)"""
while True:
# 随机生成食物坐标(确保与方块大小对齐)
food_x = round(random.randrange(0, width - block_size) / block_size) * block_size
food_y = round(random.randrange(0, height - block_size) / block_size) * block_size
# 检查食物是否与蛇身重叠,若不重叠则返回坐标
if [food_x, food_y] not in snake_list:
return food_x, food_y
4.2.4 游戏结束处理函数
当游戏结束时(蛇撞墙或撞自身),显示“游戏结束”和“最终分数”,并提示“按 Q 退出,按 R 重新开始”。
def game_over(score):
"""游戏结束界面"""
# 绘制半透明遮罩,增强文字可读性
overlay = pygame.Surface((WIDTH, HEIGHT))
overlay.set_alpha(128) # 透明度(0-255)
overlay.fill(BLACK)
screen.blit(overlay, (0, 0))
# 显示游戏结束文字
game_over_text = font.render("游戏结束!", True, WHITE)
screen.blit(game_over_text, [WIDTH // 2 - 100, HEIGHT // 2 - 50])
# 显示最终分数
score_text = font.render(f"最终分数: {score}", True, WHITE)
screen.blit(score_text, [WIDTH // 2 - 80, HEIGHT // 2])
# 显示操作提示
tip_text = font.render("按 Q 退出 | 按 R 重新开始", True, WHITE)
screen.blit(tip_text, [WIDTH // 2 - 180, HEIGHT // 2 + 50])
pygame.display.update() # 更新画面
# 等待用户操作
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q: # 按Q退出游戏
pygame.quit()
sys.exit()
if event.key == pygame.K_r: # 按R重新开始游戏
main() # 调用主函数重新启动游戏
4.3 实现游戏主循环
游戏主循环是核心,负责处理事件(如键盘按键控制蛇的方向)、更新蛇的位置、检测碰撞、绘制画面等逻辑。
def main():
"""游戏主函数"""
# 初始化蛇的初始状态
snake_list = [] # 存储蛇的每一节坐标
snake_length = 3 # 蛇的初始长度
# 蛇的初始位置(窗口中心)
x = WIDTH // 2
y = HEIGHT // 2
# 蛇的初始移动方向(向右)
x_change = 0
y_change = 0
# 生成第一个食物
food_x, food_y = generate_food(BLOCK_SIZE, WIDTH, HEIGHT, snake_list)
# 初始化分数
score = 0
game_run = True
while game_run:
# 处理事件(如关闭窗口、键盘按键)
for event in pygame.event.get():
# 关闭窗口事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 键盘按键事件(控制蛇的方向)
if event.type == pygame.KEYDOWN:
# 左移(避免与当前方向右移冲突)
if event.key == pygame.K_LEFT and x_change == 0:
x_change = -BLOCK_SIZE
y_change = 0
# 右移(避免与当前方向左移冲突)
elif event.key == pygame.K_RIGHT and x_change == 0:
x_change = BLOCK_SIZE
y_change = 0
# 上移(避免与当前方向下移冲突)
elif event.key == pygame.K_UP and y_change == 0:
y_change = -BLOCK_SIZE
x_change = 0
# 下移(避免与当前方向上移冲突)
elif event.key == pygame.K_DOWN and y_change == 0:
y_change = BLOCK_SIZE
x_change = 0
# 检测蛇是否撞墙(游戏结束条件1)
if x >= WIDTH or x < 0 or y >= HEIGHT or y < 0:
game_over(score)
# 更新蛇的位置
x += x_change
y += y_change
# 绘制背景(每次循环重新绘制,清除上一帧画面)
screen.fill(BACKGROUND_COLOR)
# 绘制网格线条(增强画面层次感)
for i in range(0, WIDTH, BLOCK_SIZE):
pygame.draw.line(screen, (200, 200, 200), (i, 0), (i, HEIGHT), 1)
for i in range(0, HEIGHT, BLOCK_SIZE):
pygame.draw.line(screen, (200, 200, 200), (0, i), (WIDTH, i), 1)
# 绘制食物(圆形)
pygame.draw.circle(screen, FOOD_COLOR,
(food_x + BLOCK_SIZE // 2, food_y + BLOCK_SIZE // 2),
BLOCK_SIZE // 2 - 2) # 比蛇头小一点,避免视觉重叠
# 更新蛇的身体(添加新头部)
snake_head = [x, y]
snake_list.append(snake_head)
# 若蛇的长度超过设定长度,删除尾部(实现移动效果)
if len(snake_list) > snake_length:
del snake_list[0]
# 检测蛇是否撞自身(游戏结束条件2)
for segment in snake_list[:-1]:
if segment == snake_head:
game_over(score)
# 绘制蛇
draw_snake(BLOCK_SIZE, snake_list)
# 显示分数
show_score(score)
# 检测蛇是否吃到食物
if x == food_x and y == food_y:
# 重新生成食物
food_x, food_y = generate_food(BLOCK_SIZE, WIDTH, HEIGHT, snake_list)
# 蛇的长度增加1
snake_length += 1
# 分数增加10
score += 10
# 更新游戏画面
pygame.display.update()
# 控制游戏帧率(决定蛇的移动速度)
clock.tick(SPEED)
# 启动游戏
if __name__ == "__main__":
main()
4.4 完整代码
下面是优化后的完整代码,如果上面相关依赖安装完成,可以直接运行使用!
#snake_game_xcleigh.py
import pygame
import random
import sys
# 初始化pygame
pygame.init()
# 游戏窗口设置
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("贪吃蛇小游戏")
# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
SNAKE_HEAD_COLOR = (0, 255, 0)
SNAKE_BODY_COLOR = (0, 200, 0)
FOOD_COLOR = (255, 0, 0)
BACKGROUND_COLOR = (230, 230, 250)
# 游戏参数
BLOCK_SIZE = 20
SPEED = 8
# 初始化时钟
clock = pygame.time.Clock()
# 字体设置
def get_font(size):
try:
return pygame.font.SysFont(["Microsoft YaHei", "SimHei", "Arial"], size)
except:
return pygame.font.Font(None, size)
def show_score(score):
font = get_font(35)
score_text = font.render(f"分数: {score}", True, BLACK)
screen.blit(score_text, [10, 10])
def draw_snake(block_size, snake_list):
# 绘制蛇身
for segment in snake_list[:-1]:
pygame.draw.rect(screen, SNAKE_BODY_COLOR,
[segment[0], segment[1], block_size, block_size])
# 绘制蛇头
if snake_list: # 确保蛇列表不为空
head = snake_list[-1]
pygame.draw.circle(screen, SNAKE_HEAD_COLOR,
(head[0] + block_size // 2, head[1] + block_size // 2),
block_size // 2)
def generate_food(block_size, width, height, snake_list):
while True:
food_x = round(random.randrange(0, width - block_size) / block_size) * block_size
food_y = round(random.randrange(0, height - block_size) / block_size) * block_size
if [food_x, food_y] not in snake_list:
return food_x, food_y
def game_over(score):
overlay = pygame.Surface((WIDTH, HEIGHT))
overlay.set_alpha(128)
overlay.fill(BLACK)
screen.blit(overlay, (0, 0))
font = get_font(35)
game_over_text = font.render("游戏结束!", True, WHITE)
screen.blit(game_over_text, [WIDTH // 2 - 100, HEIGHT // 2 - 50])
score_text = font.render(f"最终分数: {score}", True, WHITE)
screen.blit(score_text, [WIDTH // 2 - 120, HEIGHT // 2])
tip_text = font.render("按 Q 退出 | 按 R 重新开始", True, WHITE)
screen.blit(tip_text, [WIDTH // 2 - 220, HEIGHT // 2 + 50])
pygame.display.update()
waiting = True
while waiting:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
pygame.quit()
sys.exit()
if event.key == pygame.K_r:
waiting = False
main() # 重新开始游戏
def main():
# 初始化蛇
snake_list = []
snake_length = 3
# 初始位置 - 确保在窗口内
x = (WIDTH // 2) - (WIDTH // 2) % BLOCK_SIZE
y = (HEIGHT // 2) - (HEIGHT // 2) % BLOCK_SIZE
# 初始化蛇身
for i in range(snake_length):
snake_list.append([x - i * BLOCK_SIZE, y])
# 初始移动方向(向右)
x_change = BLOCK_SIZE
y_change = 0
# 生成食物
food_x, food_y = generate_food(BLOCK_SIZE, WIDTH, HEIGHT, snake_list)
# 分数
score = 0
game_run = True
while game_run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_run = False
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT and x_change == 0:
x_change = -BLOCK_SIZE
y_change = 0
elif event.key == pygame.K_RIGHT and x_change == 0:
x_change = BLOCK_SIZE
y_change = 0
elif event.key == pygame.K_UP and y_change == 0:
y_change = -BLOCK_SIZE
x_change = 0
elif event.key == pygame.K_DOWN and y_change == 0:
y_change = BLOCK_SIZE
x_change = 0
# 更新位置
x += x_change
y += y_change
# 边界检测
if x >= WIDTH or x < 0 or y >= HEIGHT or y < 0:
game_over(score)
# 更新蛇身
snake_head = [x, y]
snake_list.append(snake_head)
# 保持蛇的长度
if len(snake_list) > snake_length:
del snake_list[0]
# 自身碰撞检测
for segment in snake_list[:-1]:
if segment == snake_head:
game_over(score)
# 绘制背景
screen.fill(BACKGROUND_COLOR)
# 绘制网格
for i in range(0, WIDTH, BLOCK_SIZE):
pygame.draw.line(screen, (200, 200, 200), (i, 0), (i, HEIGHT), 1)
for i in range(0, HEIGHT, BLOCK_SIZE):
pygame.draw.line(screen, (200, 200, 200), (0, i), (WIDTH, i), 1)
# 绘制食物
pygame.draw.circle(screen, FOOD_COLOR,
(food_x + BLOCK_SIZE // 2, food_y + BLOCK_SIZE // 2),
BLOCK_SIZE // 2 - 2)
# 绘制蛇
draw_snake(BLOCK_SIZE, snake_list)
# 显示分数
show_score(score)
# 检测是否吃到食物
if x == food_x and y == food_y:
food_x, food_y = generate_food(BLOCK_SIZE, WIDTH, HEIGHT, snake_list)
snake_length += 1
score += 10
# 更新显示
pygame.display.update()
# 控制速度
clock.tick(SPEED)
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"游戏错误: {e}")
pygame.quit()
sys.exit()
运行效果如图:

五、游戏运行与测试
5.1 运行游戏
将上述代码保存为 snake_game.py 文件,在命令提示符或终端中进入文件所在目录,输入以下命令运行游戏:
python snake_game.py
运行后,将弹出游戏窗口,蛇初始位于窗口中心,食物随机生成在画面中。
5.2 游戏操作说明
- 使用键盘的 上下左右箭头键 控制蛇的移动方向;
- 蛇吃到红色食物后,身体会变长,分数增加;
- 若蛇撞墙或撞到自己的身体,游戏结束,此时可按 R 键 重新开始,或按 Q 键 退出游戏。
5.3 测试要点
- 检查蛇的移动是否流畅,方向控制是否正常(是否能避免反向移动);
- 验证食物生成是否合理(是否会与蛇身重叠);
- 测试碰撞检测是否准确(撞墙、撞自身是否会正常触发游戏结束);
- 确认分数统计是否正确(每吃一个食物分数是否增加10)。
六、游戏优化与扩展建议
6.1 视觉效果优化
- 添加动画效果:为蛇的移动添加轻微的“滑动”动画,或在吃到食物时添加食物消失的粒子效果;
- 背景升级:使用图片作为游戏背景,而非纯色,增强画面丰富度;
- 颜色渐变:让蛇的身体颜色从头部到尾部逐渐变浅,形成渐变效果,提升视觉层次。
6.2 功能扩展
- 难度递增:随着分数增加,逐渐提高游戏帧率(蛇的移动速度),增加游戏挑战性;
- 音效添加:在吃到食物时播放“加分音效”,游戏结束时播放“失败音效”,增强沉浸感;
- 排行榜功能:使用文件(如
ranking.txt)保存玩家的最高分数,游戏结束时显示历史最高分数; - 多种食物类型:添加特殊食物(如金色食物),吃到后可获得双倍分数或短暂“无敌”效果(不会撞自身)。
6.3 代码优化
- 封装类:将蛇、食物等对象封装成类(如
Snake类、Food类),使代码结构更清晰,便于维护和扩展; - 配置参数分离:将窗口大小、颜色、帧率等参数提取到单独的配置文件(如
config.py)中,方便快速修改游戏设置; - 异常处理:添加更多异常处理逻辑(如文件读写异常、资源加载异常),提高游戏的稳定性。
七、总结
本教程通过 Python 的 pygame 库,详细讲解了一款精美贪吃蛇小游戏的开发过程,从环境准备、需求设计到代码实现,逐步引导大家完成游戏开发。通过本次实战,你不仅掌握了 pygame 库的基本使用(如图形绘制、事件处理、帧率控制),还理解了游戏开发的核心逻辑(如碰撞检测、对象状态更新)。
如果在开发过程中遇到问题,可以查阅 pygame 官方文档(https://www.pygame.org/docs/),或在评论区留言交流。希望大家能在此基础上不断优化和扩展游戏功能,开发出更多有趣的作品!
这篇教程涵盖了贪吃蛇游戏开发的全流程,你可按照步骤实践。若想添加音效、排行榜等扩展功能,或对代码有优化想法,欢迎随时告诉我,我会进一步完善。
附录:扩展学习资源
- 官方资源:
- Python官网:https://www.python.org
- PyPI:https://pypi.org(查找第三方库)
- 安装包等相关文件(另附带pycharm工具),网盘下载地址:https://pan.quark.cn/s/649af731037c
- 学习资料视频和文档资源,网盘下载地址: https://pan.quark.cn/s/ee16901a8954
- 本专栏特色资源:
- 代码资源仓库:CSDN专属资源在线获取
- 海量Python教程:关注公众号:xcLeigh,获取网盘地址
- 一对一答疑:添加微信与博主在线沟通(
备注“Python专栏”)
联系博主
xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
💞 关注博主 🌀 带你实现畅游前后端!
🏰 大屏可视化 🌀 带你体验酷炫大屏!
💯 神秘个人简介 🌀 带你体验不一样得介绍!
🥇 从零到一学习Python 🌀 带你玩转Python技术流!
🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!
💦 注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。

📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_43151418/article/details/151929157



