贪吃蛇游戏是一款于 1976 年由格雷姆林工业(Gremlin Industries)开发,并由世嘉游戏(SEGA)发行的街机迷宫游戏。这款游戏曾经登上多款诺基亚黑白机,对上世纪的玩家来说颇有怀旧感。

贪吃蛇的玩法

玩家在贪吃蛇游戏中使用方向键操作贪吃蛇前进,尽可能收集食物取得高分。贪吃蛇在获取食物后,身体长度会进一步加长,而当玩家不小心撞向墙壁或自己时,游戏便结束。

对 Python 初学者而言,玩法逻辑较为简单的贪吃蛇游戏正适合用来练习 Turtle 框架,而这款以 Python 为核心的游戏将会使用以下三个库:

  • Turtle - 用于在虚拟画布中绘制图形

  • Time - 计算游戏中的用时

  • Random - 在 Python 中生成随机数字,对应随机出现的食物

这篇教程将使用 Lightly 在线编写 Python 代码,无需下载任何应用或安装环境依赖即可在浏览器中编程。

第一步:导入模块

在开始其他编写其他代码前,我们需要使用 import 代码分别导入 turtle、time 及 random 等模块。由于这些模块都已预安装在 Python 中,我们只需在代码中导入即可。若模块缺失,你也可以在 Lightly 中使用 Quick Fix 进行快速安装。

第二步:设置游戏界面

完成模块导入后,我们需要绘制游戏窗口、蛇头及食物等游戏内容,同时也需要在顶部显示游戏得分。

# 绘制窗口
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
# 用户可以自行调整窗口的长度与宽度
wn.setup(width=600, height=600)
wn.tracer(0)# 蛇头
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
head.direction = "Stop"# 游戏中的食物
food = turtle.Turtle()
colors = random.choice(['red', 'green', 'black'])
shapes = random.choice(['square', 'triangle', 'circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
food.goto(0, 100)pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 250)
pen.write("得分 : 0 最高得分 : 0", align="center",font=("candara", 24, "bold"))

代码效果:

第三步:监听按键

添加物体后还需要监听按键,才能通过按键控制蛇的动作。在这个游戏中,我们使用 WASD 四键分别控制上下左右移动。

# 设定按键方向def group():if head.direction != "down":head.direction = "up"def godown():if head.direction != "up":head.direction = "down"def goleft():if head.direction != "right":head.direction = "left"def goright():if head.direction != "left":head.direction = "right"def move():if head.direction == "up":y = head.ycor()head.sety(y+20)if head.direction == "down":y = head.ycor()head.sety(y-20)if head.direction == "left":x = head.xcor()head.setx(x-20)if head.direction == "right":x = head.xcor()head.setx(x+20)wn.listen()
wn.onkeypress(group, "w")
wn.onkeypress(godown, "s")
wn.onkeypress(goleft, "a")
wn.onkeypress(goright, "d")

第四步:完善游戏机制

我们现在已经可以通过键盘按键控制贪吃蛇移动,但我们还需要进一步添加游戏机制,让游戏变得更完善。例如:改变蛇身的长度和颜色、贪吃蛇吃下食物后计分、检查蛇头碰撞情况、计分并保存最高分等。

游戏最终的效果:

【查看完整代码】https://074658e7fa-share.lightly.teamcode.com

以上代码可在浏览器中直接打开,相关教程可查看:

如何打开并编辑他人用 Lightly 分享的项目?

今天的 Python 贪吃蛇教程就到这里,欢迎你在评论区留言提出疑问和建议,也欢迎你查看 TeamCode 的一些往期文章。

怎么看待 Python(PyScript) 可以做浏览器前端开发语言?

Python 教程:从 Python 爬虫到数据分析

学习 Python 爬虫,手把手通过 Python 入门爬取网页信息

使用 Python Turtle 制作贪吃蛇游戏相关推荐

  1. 使用Python语言制作贪吃蛇游戏,并制作成为exe可执行文件

    本项目为贪吃蛇游戏,上下左右控制蛇的行走路径,并将游戏打包为exe文件,可供其他没有python环境和代码的电脑 Play 游戏! 目录 一.项目成果 二.项目架构 三.项目代码 四.环境搭建 五.矢 ...

  2. python趣味编程-贪吃蛇游戏

    在上一期我们用Python实现了一个扫雷游戏的游戏,这一期我们继续使用Python实现一个简单的游戏,让我们开始今天的旅程吧~ 在Python中使用Turtle的贪吃蛇游戏免费源代码 介绍 这 在py ...

  3. python写一个游戏多少代码-使用Python写一个贪吃蛇游戏实例代码

    我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到 ...

  4. python游戏脚本实例-使用Python写一个贪吃蛇游戏实例代码

    我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到 ...

  5. Love2D游戏引擎制作贪吃蛇游戏

    预览游戏 love2d游戏引擎重要函数 详情: love.load:当游戏开始时被调用且仅调用一次 love.draw:回调函数,每帧更新一次游戏画面 love.update:回调函数,每帧更新一次游 ...

  6. 如何用html做一个贪吃蛇,如何用HTML5制作贪吃蛇游戏

    如何用HTML5制作贪吃蛇游戏 发布时间:2020-07-09 15:09:59 来源:亿速云 阅读:122 作者:Leah 如何用HTML5制作贪吃蛇游戏?很多新手对此不是很清楚,为了帮助大家解决这 ...

  7. 手把手教你使用 Python 制作贪吃蛇游戏

    贪吃蛇游戏是有史以来最受欢迎的街机游戏之一.在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果.在学习 Python 或 Pygame 时,可以将创建蛇游戏视为一项挑战.这是每个 ...

  8. python制作贪吃蛇游戏下载_自动玩贪吃蛇,满屏的蛇影当然由python制作AI贪吃蛇!...

    image 前提:本文实现AI贪吃蛇自行对战,加上人机对战,文章末尾附上源代码以及各位大佬的链接,还有一些实现步骤,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什 ...

  9. 手把手教你使用 Python 制作贪吃蛇游戏,才发现原来制作起来很简单ǃ

    贪吃蛇游戏是有史以来最受欢迎的街机游戏之一.在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果.在学习 Python 或 Pygame 时,可以将创建蛇游戏视为一项挑战.这是每个 ...

最新文章

  1. ArcGIS的许可文件问题
  2. pandas基于dataframe字符串数据列不包含特定字符串来筛选dataframe中的数据行(rows where values do not contain substring)
  3. 京东2017校招前端主观题汇总
  4. vue 外卖app(3) 引入阿里图标
  5. jsp判断字符串相等_最长回文字符串三种解法
  6. 在SAP HANA Express Edition里创建数据库表
  7. excel if函数 android,Excel函数公式:多条件判断你还在用If函数来实现,那就真的Out了...
  8. mysql创建数据库时使用sql/wordbench使主键(primary key)自增
  9. 康奈尔机器人的肌肉是爆米花做的,果然很有爆发力 | ICRA 2018
  10. 我将其名称作为字符串时如何执行JavaScript函数
  11. node + express + sockio 在线聊天室
  12. What?什么是区块链?你不知道就太low了
  13. JM8.6之erc_api.c文件初探
  14. 病房呼叫系统数电设计(含报告)
  15. GoodERP交付手册:CRM模块交付
  16. unity游戏模型获取- AssertStudio(原GuiStudio)(以第二银河为例)
  17. a标签在IE浏览器进行download下载,出现中文乱码 - 戴向天
  18. [OpenCV实战]39 在OpenCV中使用ArUco标记的增强现实
  19. 提高SDN控制器拓扑发现性能
  20. 重复文件太多,该怎样快速清理?

热门文章

  1. 模拟电路设计(37)---集成化开关电源变换器
  2. php人才系统 转让,PHP云人才系统 phpyun v3.2 正式版
  3. 解决kaldi报错:fix_data_dir.sh: no utterances remained: not proceeding further.(亲测有效)
  4. MySQL使用WHERE子句设置查询条件
  5. 家里的WiFi连不上?我们可以自行修复么?
  6. Android “.nomedia“ 文件的使用方法和原理
  7. vue下载表单文件流功能实现
  8. 蓝桥杯算法训练 无聊的逗(状态压缩搜索)
  9. 算法导论 — 思考题8-4 水壶
  10. 小区地下车库怎么进出,怎么用导航找自己停车的位置