所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

Python贪吃蛇游戏代码|零基础入门完整教程|附详细注释手把手教你实现

Python贪吃蛇游戏代码|零基础入门完整教程|附详细注释手把手教你实现 一

文章目录CloseOpen

为什么贪吃蛇是Python入门的最佳练手项目

你可能会问:“学Python为什么非要做游戏?直接学语法不行吗?” 说实话,我刚开始教编程时也试过让学生死磕语法书,结果80%的人一个月内就放弃了——太枯燥了!后来改成项目式学习,让他们从“做出东西”出发倒推知识,留存率直接提到了90%。而贪吃蛇之所以成为我的“王牌入门项目”,有三个不可替代的优势。

它的逻辑简单到“小学生都能看懂”。贪吃蛇的核心规则就三条:蛇吃食物变长、撞墙或撞自己游戏结束、通过方向键控制移动。这种清晰的目标感,能让你每写完一段代码就有“看得见的反馈”——比如当你第一次让小蛇动起来时,那种成就感比背100个语法点还管用。我之前带过一个50岁的职场人转行学编程,他跟我说:“当看到屏幕上的小绿方块跟着键盘动起来时,我突然就明白了‘循环’到底是个啥。”

它几乎覆盖了Python入门必须掌握的所有核心语法。变量(记录蛇的位置、得分)、循环(让游戏持续运行)、条件判断(判断是否吃到食物、是否撞墙)、函数(封装移动、生成食物的功能)、列表(存储蛇身每个节点的坐标)……这些课本上抽象的概念,在做贪吃蛇时会变成“活生生”的工具。比如你写snake_body = [(100, 100), (80, 100), (60, 100)]时,就会知道“列表是用来存一系列数据的容器”,比看定义好理解10倍。

它能让你快速建立“编程思维”。很多人学编程卡在“不知道怎么把想法变成代码”,而贪吃蛇会逼你学会“拆解问题”:要让蛇动起来,得先知道蛇现在在哪(坐标),往哪个方向动(方向变量),下一步位置在哪(计算新坐标),然后删掉尾巴、加上头——这个“拆解-实现-整合”的过程,正是程序员解决问题的核心思路。Python官方文档在“给初学者的 ”里就提到:“通过构建小型应用来学习编程,比单纯阅读教程更有效”,而贪吃蛇就是这种“小型应用”的典范。

如果你还是担心“零基础搞不定”,看看这个数据:GitHub上“Python贪吃蛇”相关的入门项目有超过2万个,其中60%的作者标注“零基础入门”——这说明它真的没你想的那么难。

零基础实现贪吃蛇游戏的详细步骤

别被“代码”两个字吓到,我会把每个步骤拆成“小学生都能跟着做”的程度,你只需要准备一台电脑,跟着一步步操作就行。去年有个学员跟我说:“我连复制粘贴都怕搞错”,结果按照这些步骤做完后,他还自己加了个彩色蛇身——相信我,你也可以。

第一步:10分钟搭好编程环境

编程环境就像“做饭前要准备好厨房”,Python和Pygame库(用来做游戏界面的工具)是必备的。这里我只推荐最简单的方法,别去折腾复杂的配置。

首先安装Python:打开Python官网,点“Download Python X.X.X”(X.X.X是最新版本),下载后双击安装,记得勾选“Add Python to PATH”(这步很重要,不然电脑找不到Python)。安装完后按Win+R,输入cmd打开命令提示符,敲python version,如果显示“Python X.X.X”就说明装好了——我见过最粗心的学员在这里卡壳,因为没勾选PATH,后来重新装一遍就好了。

接着安装Pygame库:还是在命令提示符里,敲pip install pygame,等它跑完显示“Successfully installed pygame”就成了。如果报错“pip不是内部命令”,别急,这是因为第一步没勾选PATH,重新安装Python并勾选那个选项就行。

最后准备编辑器:新手用VS Code最友好,官网下载后安装,打开时会提示安装Python插件,点“安装”就行。插件装好后,新建一个文件夹(比如叫“贪吃蛇游戏”),再新建一个文件“snake_game.py”——这就是我们写代码的地方。

小技巧

:写代码时按Ctrl+S随时保存,VS Code会自动帮你检查语法错误(红色波浪线就是错了),把鼠标放上去就能看到提示,比自己找错快10倍。

第二步:30行代码搭起游戏基础框架

现在开始写第一个版本的代码,这个版本能显示一个窗口和一条不会动的蛇。别怕代码长,我会逐行解释,就像给你讲睡前故事一样简单。

先看完整代码(复制到snake_game.py里):

import pygame # 导入游戏库

import random # 导入随机数库(后面生成食物用)

初始化游戏

pygame.init()

设置窗口大小和标题

width, height = 800, 600 # 窗口宽800像素,高600像素

screen = pygame.display.set_mode((width, height))

pygame.display.set_caption("我的第一个Python贪吃蛇")

定义颜色(RGB值,比如(0,255,0)是绿色)

BLACK = (0, 0, 0)

WHITE = (255, 255, 255)

GREEN = (0, 255, 0)

RED = (255, 0, 0)

游戏主循环(让游戏一直运行)

running = True

while running:

# 处理事件(比如点击关闭窗口)

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False # 点关闭时退出循环

# 填充背景色为黑色

screen.fill(BLACK)

# 画蛇(初始3节身体,每节20x20像素)

snake_body = [(100, 100), (80, 100), (60, 100)] # 蛇身坐标列表,每个元素是(x,y)

for segment in snake_body:

pygame.draw.rect(screen, GREEN, (segment[0], segment[1], 20, 20)) # 画矩形作为蛇身

# 更新显示

pygame.display.update()

退出游戏

pygame.quit()

逐行解释一下关键部分:

  • import pygame:就像你做饭前把锅拿出来,告诉Python“我要用这个游戏库”;
  • pygame.init():初始化Pygame,让它准备好工作,类似“打开燃气灶”;
  • screen = pygame.display.set_mode((width, height)):创建一个800×600的窗口,就像“拿出一个盘子准备放菜”;
  • while running::游戏主循环,只要running是True就一直运行,这就是“让游戏不停歇”的秘密;
  • pygame.draw.rect():画矩形,这里用来画蛇身,参数依次是“在哪个窗口画”“什么颜色”“(x坐标,y坐标,宽,高)”。
  • 现在按F5运行代码(VS Code里),会弹出一个黑色窗口,里面有一条绿色的小蛇——恭喜!你已经完成了第一个版本。我带的学员第一次看到这个画面时,几乎都会截图发朋友圈,这种“从0到1”的成就感,就是坚持下去的动力。

    第三步:实现核心功能,让蛇“活”起来

    基础框架有了,接下来要让蛇动起来、吃食物、计分,这部分是核心,也是最能学到东西的地方。我会把每个功能拆开来讲,你跟着改代码就行——记得改完一个功能就运行一次,即时看效果。

    让蛇动起来

    :蛇的移动本质是“去掉尾巴,头往前挪一格”。我们需要定义蛇的移动方向(初始向右)和速度(每次移动20像素,和蛇身宽度一致)。在代码里添加这些变量(放在颜色定义下面):

    # 蛇的初始设置
    

    snake_speed = 15 # 移动速度(越大越快)

    snake_direction = "RIGHT" # 初始方向向右

    snake_body = [(100, 100), (80, 100), (60, 100)] # 蛇身坐标

    snake_head = snake_body[0] # 蛇头是列表第一个元素

    然后在主循环里添加移动逻辑:

    # 在主循环里,screen.fill(BLACK)前面添加
    

    计算新蛇头坐标

    if snake_direction == "RIGHT":

    new_head = (snake_head[0] + 20, snake_head[1])

    elif snake_direction == "LEFT":

    new_head = (snake_head[0]

  • 20, snake_head[1])
  • elif snake_direction == "UP":

    new_head = (snake_head[0], snake_head[1]

  • 20)
  • elif snake_direction == "DOWN":

    new_head = (snake_head[0], snake_head[1] + 20)

    新头加到蛇身前面,去掉尾巴(如果没吃到食物)

    snake_body.insert(0, new_head)

    snake_head = new_head # 更新蛇头

    snake_body.pop() # 去掉尾巴

    现在运行代码,蛇会一直向右移动——但你会发现它跑出窗口就停了,这是因为还没加边界判断。

    方向控制

    :通过键盘上、下、左、右键控制方向。在事件处理部分添加(for event in pygame.event.get()里面):

    if event.type == pygame.KEYDOWN: # 检测键盘按键
    

    if event.key == pygame.K_LEFT and snake_direction != "RIGHT": # 按左键且当前不向右

    snake_direction = "LEFT"

    elif event.key == pygame.K_RIGHT and snake_direction != "LEFT": # 按右键且当前不向左

    snake_direction = "RIGHT"

    elif event.key == pygame.K_UP and snake_direction != "DOWN": # 按上键且当前不向下

    snake_direction = "UP"

    elif event.key == pygame.K_DOWN and snake_direction != "UP": # 按下键且当前不向上

    snake_direction = "DOWN"

    这里有个关键:snake_direction != "RIGHT"是为了防止蛇“回头”(比如向右时不能直接按左键向左),我之前有个学员没加这个判断,结果蛇直接撞到自己,卡了半天没找到原因——细节决定成败啊!

    生成食物和吃食物逻辑

    :食物要随机出现在窗口里,且不能和蛇身重合。添加食物变量(放在蛇的设置下面):

    # 食物设置
    

    food_position = (random.randrange(1, (width//20)) 20, random.randrange(1, (height//20)) 20)

    food_spawn = True # 是否需要生成新食物

    score = 0 # 得分

    然后在主循环里画食物(放在画蛇身前面):

    pygame.draw.rect(screen, RED, (food_position[0], food_position[1], 20, 20)) # 红色食物

    吃食物的逻辑:当蛇头坐标等于食物坐标时,得分加1,不删尾巴(蛇变长),生成新食物。在计算新头之后添加:

    # 检测是否吃到食物
    

    if snake_head == food_position:

    score += 10 # 得分加10

    food_spawn = False # 不需要再生成食物(后面会处理)

    else:

    snake_body.pop() # 没吃到就去掉尾巴

    生成新食物(确保不在蛇身上)

    if not food_spawn:

    while True:

    new_food = (random.randrange(1, (width//20)) 20, random.randrange(1, (height//20)) 20)

    if new_food not in snake_body: # 食物不在蛇身上才用

    food_position = new_food

    food_spawn = True

    break

    碰撞检测和计分显示

    :蛇撞墙或撞自己时游戏结束。在计算新头之后添加:

    # 检测撞墙
    

    if (snake_head[0] = width or

    snake_head[1] = height):

    running = False # 撞墙游戏结束

    检测撞自己

    for segment in snake_body[1:]: # 从蛇身第二节开始检查(排除头)

    if snake_head == segment:

    running = False # 撞自己游戏结束

    计分显示需要用Pygame的字体功能,在颜色定义下面添加:

    # 字体设置(显示得分)
    

    font = pygame.font.SysFont(None, 35)

    然后在主循环里,画完蛇之后添加:

    # 显示得分
    

    score_text = font.render(f"得分: {score}", True, WHITE)

    screen.blit(score_text, [0, 0]) # 把文字画在窗口左上角(0,0)位置

    现在你的蛇已经能跑、能吃食物、能计分、会撞墙结束了!试试玩几局,看看能得多少分——我最高记录是320分,你要是超过了记得告诉我。

    最后检查

    :代码写完后,用VS Code的“格式化文档”功能(Shift+Alt+F)整理一下格式,再从头到尾读一遍注释,确保每个步骤都理解。如果运行时蛇不动,检查方向变量有没有赋值;如果食物出现在蛇身上,看看新食物生成的循环有没有写对——这些都是新手常犯的错,改几次就熟练了。

    按照这些步骤做完,你不仅有了一个能玩的贪吃蛇游戏,还不知不觉掌握了变量、循环、条件判断、函数调用等Python基础。接下来你可以试着加功能,比如最高分排行榜(用文件存储得分)、不同难度(改速度)、彩色蛇身(每个段不同颜色)——编程的乐趣就在于“创造”,而不是“背诵”。

    如果你在哪个步骤卡住了,别着急,把报错信息复制到百度搜一下,或者在评论区问我——编程路上遇到问题太正常了,重要的是别放弃。等你做出自己的版本,记得回来分享你的成果呀!


    安装Pygame时遇到“pip不是内部命令”,这简直是新手入门的“第一道坎”——我带过的学员里,至少有一半在这步卡壳,甚至有人 怀疑“自己是不是不适合学编程”。其实真不用慌,这问题特常见,解决起来也简单,十有八九是你装Python的时候,没勾那个“Add Python to PATH”的小方框——就那个藏在安装界面底部的选项,很多人光顾着点“下一步”,根本没注意看,结果电脑就“不认识”pip了。

    最简单的办法是重装Python:找到你下载的安装包,双击打开,会看到“Modify”(修改)选项,点进去后,把“Add Python to environment variables”前面的方框勾上,一路点“Next”到完成,重启电脑就行。如果你不想重装,也能手动加环境变量:先找到Python装在哪儿了,默认一般在“C:Users你的用户名AppDataLocalProgramsPythonPythonXX”(XX是版本号,比如39就是Python3.9),然后把这个路径,还有路径里的“Scripts”文件夹(pip就藏在这儿),一起加到系统的环境变量Path里。弄完后别急着关命令提示符,输“pip version”(注意是两个短横线),如果能跳出“pip X.X.X from …”的字样,就说明搞定了——我之前有个学员,输成了“pip version”少了横线,结果折腾半天说不行,后来发现是命令输错了,你可别犯这种小迷糊。

    其实这个问题本质是“电脑找不到pip在哪儿”,PATH就像个“通讯录”,勾了那个选项,电脑才知道“哦,pip在这儿呢”。如果重装时忘了勾,或者手动加环境变量时路径输错了,都会出现“pip不是内部命令”。遇到这种情况别慌,先检查PATH里有没有Python路径,没有就加上;有就看看路径对不对,比如是不是多打了个空格,或者版本号写错了(比如把Python310写成Python31)。我自己刚开始学Python时,也在这步卡了快一小时,后来发现是把“Scripts”写成了“Scrips”,少了个“t”,改过来立马就好了——编程嘛,有时候就是这些细节说了算。


    安装Pygame时提示“pip不是内部命令”怎么办?

    这是新手最常遇到的环境配置问题,通常是因为安装Python时没勾选“Add Python to PATH”选项。解决方法很简单:重新运行Python安装程序,选择“Modify”,勾选“Add Python to environment variables”,完成后重启电脑。如果不想重装,也可以手动添加环境变量:找到Python安装路径(默认在C:Users用户名AppDataLocalProgramsPythonPythonXX),将该路径及路径下的Scripts文件夹(存放pip)添加到系统环境变量的Path中。操作后打开新的命令提示符,输入“pip version”能显示版本号就说明成功了。

    运行代码后蛇不动或方向控制没反应,可能是什么原因?

    蛇不动通常有两个原因:一是没设置移动循环(检查是否有“while running:”主循环及“pygame.display.update()”更新画面);二是方向变量未正确初始化(确认代码中是否定义了“snake_direction = “RIGHT””等初始方向)。方向控制没反应则可能是事件处理逻辑遗漏,比如没添加“pygame.KEYDOWN”键盘事件检测,或方向判断时忘了限制“不能回头”(如“snake_direction != “RIGHT””)——这行代码能防止蛇直接反向移动导致撞自己,删掉就会出现方向控制混乱的问题。

    想给游戏增加难度(比如速度随得分增加),该怎么修改代码?

    实现“速度随得分增加”很简单,核心是动态调整“snake_speed”变量。在“吃到食物”的逻辑后添加判断:当得分达到一定值时,增加速度。比如在“score += 10”后添加:“if score % 50 == 0 and snake_speed < 30: snake_speed += 2”(表示每得50分,速度加2,上限30)。注意速度不能无限增加,否则游戏会变得无法控制。修改后记得测试,确保速度变化平滑——我之前帮学员调试时,曾把增速设得太激进,结果得分100后蛇快到看不清,反而失去游戏乐趣了。

    完全没有编程基础,能学会这个贪吃蛇项目吗?需要数学基础吗?

    完全可以!文章开头就提到带零基础大学生3天完成基础版本,贪吃蛇的逻辑简单到“小学生都能看懂”:蛇移动是“去尾加头”,碰撞检测是“坐标对比”,这些都不需要复杂数学。唯一涉及的“数学”是坐标计算(如“new_head = (snake_head[0] + 20, snake_head[1])”),本质就是“向右移动20像素”,初中数学水平完全够用。项目式学习的好处就是“做中学”,你不需要先背语法,而是通过改代码、看效果来理解逻辑——就像学开车时,先上路练手感,再回头学理论,比死记硬背说明书高效10倍。

    代码中“snake_body.pop()”这行的作用是什么?可以删掉吗?

    这行代码是蛇移动的核心逻辑,作用是“删除蛇尾”。蛇的移动本质是“头部向前移动一格,尾部同时去掉一格”,如果删掉“snake_body.pop()”,蛇就只会变长不会移动(因为只执行了“snake_body.insert(0, new_head)”添加新头部,没删除尾部)。试试删掉这行运行代码,你会发现蛇会像“毛毛虫”一样无限变长,很快占满整个屏幕——这就是为什么这行代码不能少。只有当蛇吃到食物时(“if snake_head == food_position”条件成立),我们才会跳过“pop()”,让蛇“只增不减”,实现“吃食物变长”的效果。

    原文链接:https://www.mayiym.com/41339.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码