iconfont怎么用_FunPy101|手把手用Python做个猫捉老鼠的小游戏吧

e2be43f3934d9710932549a93b8def7e.png

手把手用Python做个猫捉老鼠的小游戏吧?

挑战难度: ⭐⭐⭐

如果你连他俩都不认识,说明你还小~

大家周末好?,又到了周末看动画片,打游戏,敲代码?‍?的美好宅时光了?

接下去,请允许我隆重介绍本期FunPy101的主角们,他们就是???

7c2751435d1747eff07c4dd640f77775.png

?汤姆和杰瑞?

左边的灰色小猫?名叫Tom汤姆,是一只被主人惯坏了的家猫。右边的棕色小老鼠?名叫Jerry杰瑞,是汤姆的邻居。

他俩每天的生活都是围绕着汤姆?企图抓住杰瑞的故事而展开,当然随之而来的还有各种家中物品的大破坏?

c701403047f0d5491effc0fc49fbba43.gif

e81b1f79cdf6c2a5cfe25717d6968b60.gif

大部分情况下,汤姆的计划都没办法骗过聪明的杰瑞,结果反而让自己吃了苦头?

4462f3feb5b0653cd1c44ff3cb54be0c.gif

22b9f870e40a2aa9976634c1a490ea6d.gif

不过有时,得意过头的杰瑞也会不小心中了汤姆的下怀?

93503b001723223f960826a4163b916a.gif

2b731d1aa634b89d2a44845ab49f35c2.gif

偶尔的偶尔,他俩也会和谐得像是亲密朋友?

daed352662e1c772508c75dedeabfc78.gif

7967972bdfcbe12cc2b199064fa7aca5.gif

你知道吗,从1939年他俩第一次出镜?以来,这对欢喜冤家已经追逐嬉闹80年了!他们带给我们(也许不包括你们哦~)的欢乐多的数也数不清?

那这周的代码时光呢,就让我们一块用Python做一个猫捉老鼠的小游戏?,重现一下这俩家伙日常追逐却又互相享受?的画面吧。

对了☝,如果你还没有看过这个动画片,那可千万别在完成代码前播放哦,真的太好看了,你会入迷的?

6d8bc74f4e59de2c183303a87dc61154.png

设计思路?

温馨提示:这次的游戏需要我们对Python和Turtle模块有一定的基础。限于篇幅,文章只分享关键代码。完整的代码需要大家自己动动脑筋或者后台私信啦?

首先,我们先来看看游戏效果✨

8db115a1807e8e3fdfedc5351b3ae0fe.gif

看完了效果,暂停文章思考两分钟

⏳⏳

是不是脑子里已经有了思路?,只差一些关键的代码了?

a1601bebc389819517df70cddc590ded.gif

没错,游戏的思路很简单,一共就那么几步:

  1. 创建追逐场地及开场文字

  2. 产生汤姆和杰瑞,随机出现在屏幕上

  3. 用键盘控制杰瑞移动

  4. 汤姆自动寻找最近的路线捉杰瑞

  5. 如果汤姆足够靠近杰瑞了,那么杰瑞被抓住

  6. 游戏结束,显示杰瑞逃跑了多少秒

那么好,接下去就让Rookie手把手?,教你每一步都是怎么做的吧!

详细步骤?

1. 创建追逐场地及开场文字

游戏场地部分,我们使用turtle.Screen()创建一个游戏屏幕。

playground = turtle.Screen()

而文字部分则很简单,之前的文章也有很多例子,使用turtle里的write方法就好了

b5001073dcb9ecc417b527a14cea2e32.png

如果你喜欢我的字体?,喏,拿去用吧~

writer = turtle.Turtle()writer.color('brown')writer.ht()writer.pu()writer.goto(0, 0)writer.write("TOM & JERRY", align='center', font=('Comic Sans MS', 50,'bold'))writer.goto(0, -50)writer.write("READY? 3, 2, 1, GO!", align='center', font=('Comic Sans MS', 25,'bold'))    time.sleep(3)writer.clear()

2. 产生汤姆和杰瑞,随机出现在屏幕上

fdbb848e6f75f70c13dfc43bccf65a11.png

这儿我们做的事情其实就是召唤了两只海龟?,并且把海龟的形状改成了猫和老鼠。

我们就拿杰瑞来举例吧☝

首先,你要先从网上找一个自己喜欢的,大小在64x64像素以内的图片(太大了会占满游戏屏幕)。当然也可以像我一样直接到图标网站(比如www.iconfont.cn)去下载相关图标,简单省事?

d0bd79dff685769caca1e14ec2e7ecd7.png

下载完图标以后,把它放到和游戏代码同样的文件夹里,并且记得把图标重命名为jerry.gif

为啥要用gif作为后缀,没办法,turtle只支持这个格式?

然后我们把这个图标告诉上一步创建的游戏场地,以便我们能召唤杰瑞。

playground.register_shape('jerry.gif')jerry = turtle.Turle()jerry.shape('jerry.gif')

最后,我们使用随机random这个工具包?,把杰瑞移动到场地上的随机位置就好啦。

3. 用键盘控制杰瑞移动

这是之前没有提到过的功能,我们稍微讲一讲。如何用键盘⌨控制杰瑞呢,我们需要让整个游戏场地监听玩家手上的键盘。说白了,就是让Python竖着耳朵?听你下达指令,一旦收到指令就立即按指令办事?

所以首先我们要创建一系列的键盘指令?,比如当键盘里的向上按钮被按下时就让杰瑞往上逃跑?

413afec5b369a98635258035a463be6a.png

我们创建一个函数,取名成up,这就是一个简单的指令,功能为让杰瑞向上跑20个像素。

def up():    jerry.setheading(90)    jerry.forward(20)

然后我们把函数和键盘里的向上按钮捆绑?在一起,并向游戏场地。这一步相当于告诉游戏场地的相关人员,我把指令放在这了,当键盘上的向上按钮被按下时,你就照着指令办事。

playground.onkey(up, 'Up')

最后,我们命令游戏场地相关人员,注意认真听?,可千万别错过指令了。

playground.listen()

其余的键盘操作,左右下都是同理。

4. 汤姆自动寻找最近的路线捉杰瑞

汤姆可不笨,它会用最短的路线去捉杰瑞。什么是最短路线呢?当然是连接他俩的直线了。

我们的做法很简单,控制汤姆让他面朝杰瑞,然后大步往前走就行了?。怎么转变朝向呢?诶,刚好,Turtle里有个好用的办法叫towards,本身就是“朝向“的意思。我们使用tom.towards(jerry)就可以计算杰瑞距离汤姆所在的方位,然后通过setheading让汤姆?面朝这个方向,最后向前走一定的距离(比如每次前进5个像素)就可以了。

因为汤姆需要不断做这些事情?,所以记得在外加一层while循环。具体代码如下

while True:    tom.setheading(tom.towards(jerry))    tom.forward(5)

b5bb4e03c1e8975b827f74099eef8141.gif

5. 如果汤姆足够靠近杰瑞了,那么杰瑞被抓住

要算出汤姆和杰瑞之间的距离,只要利用汤姆和杰瑞的坐标,使用简单的勾股定理?就能计算出来了。

假设汤姆和杰瑞的坐标分别为(x1, y1) 和 (x2, y2),那么他俩的距离写成Python代码就是((x1 - x2)**2 + (y1 - y2)**2)**0.5

不过感谢Turtle,提供了一个更加简单的计算方法,即使用distance函数。

比如,我们要写”当汤姆距离杰瑞小于10个像素时,杰瑞就被抓住了“,我们就可以这样写✍

if tom.distance(jerry) < 10:    print("got you!")

e285e33b3c1d768abcfdf986f742a993.gif

6. 游戏结束,显示杰瑞逃跑了多少秒

恭喜你?,这是最后一步啦,这一步和第一步显示开场文字类似,只不过我们要多显示一个杰瑞逃跑的时间⏰

如何获得这个时间呢?我们可以在游戏开始前掐个表?,在杰瑞被抓住的时候再掐个表?,两个表之间的差就是杰瑞存活了多少秒。

跟时间有关的操作,找time这个工具包就对了?

import timestart = time.time() # 掐个表作为开始end = time.time() # 掐个表作为结束total_time = end - start # 总时间等于结束减去开始

代码简单易懂,但是想想看,这几行代码分别该放在哪呢?


61fe1a56032810f5b3d8819858a16d4b.gif

大功告成,不知道这些提示你们消化了没有?你能独立完成这个猫捉老鼠的小游戏吗?如果想让游戏变得简单或是困难,你知道要修改哪些参数吗?要是有不明白的,可别害羞,积极举手提问哦✋

最后,让我们一起伴随着熟悉的配乐,再来感受一把游戏的乐趣吧!


32d66ca2d6d456a17cd456947acff652.png

☝长按看看,这儿有一个宝藏☝
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值