使用 Python Turtle 制作贪吃蛇游戏

霍启
• 阅读 1423

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

贪吃蛇的玩法

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

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

  • Turtle - 用于在虚拟画布中绘制图形
  • Time - 计算游戏中的用时
  • Random - 在 Python 中生成随机数字,对应随机出现的食物

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

第一步:导入模块

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

使用 Python Turtle 制作贪吃蛇游戏

第二步:设置游戏界面

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

# 绘制窗口
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"))

代码效果:

使用 Python Turtle 制作贪吃蛇游戏

第三步:监听按键

添加物体后还需要监听按键,才能通过按键控制蛇的动作。在这个游戏中,我们使用 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")

第四步:完善游戏机制

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

游戏最终的效果:

使用 Python Turtle 制作贪吃蛇游戏

【查看完整代码】https://074658e7fa-share.ligh...
以上代码可在浏览器中直接打开,相关教程可查看:如何打开并编辑他人用 Lightly 分享的项目?

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

怎么看待 Python(PyScript) 可以做浏览器前端开发语言?
Python 教程:从 Python 爬虫到数据分析
学习 Python 爬虫,手把手通过 Python 入门爬取网页信息

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jack Jack
4年前
使用Java 语言编写一个贪吃蛇游戏
使用Java语言编写一个贪吃蛇游戏,代码如下:GreedSnake.javapackagejzjsfx;publicclassGreedSnakepublicstaticvoidmain(Stringargs)SnakeModelmodelnewSnakeModel(20,30);SnakeControlc
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
2D游戏作业:贪吃蛇
1.游戏介绍这款游戏通过上下左右键来引导贪吃蛇吃到食物从而贪吃蛇越变越长,当贪吃蛇碰到窗口的四壁是贪吃蛇撞死从而游戏结束。2\.开发工具VisualStudioCode3.部分代码介绍导入模块importpygame,sys,time,randomfromp
流浪剑客 流浪剑客
1年前
愤怒的小鸟重制版Angry Birds Reloaded 中文破解下载
(AngryBirds)是一款由芬兰游戏开发公司RovioEntertAInment开发的休闲益智游戏,于2009年首次推出,现已在全球范围内拥有数亿玩家。以下是《愤怒的小鸟》的主要特点:1.简单易上手:《愤怒的小鸟》游戏玩法简单易上手,对于玩家来说非常容
燕青 燕青
1年前
「Macos游戏」愤怒的小鸟重制版Angry Birds Reloaded for Mac 中文版
(AngryBirds)是一款由芬兰游戏开发公司RovioEntertAInment开发的休闲益智游戏,于2009年首次推出,现已在全球范围内拥有数亿玩家。以下是《愤怒的小鸟》的主要特点:1.简单易上手:《愤怒的小鸟》游戏玩法简单易上手,对于玩家来说非常容
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
霍启
霍启
Lv1
我去过很多地方,却只遇见过很少的我们
文章
4
粉丝
0
获赞
0