【Python小游戏合集】自行开发个猫捉老鼠的小游戏~

导语:

周末好吖!铁汁们~到了看动画片,打游戏,敲代码‍的美好宅时光了

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第1张图片

 大家小时候有没有看过一部《猫和老鼠》的动画片80,90 ,00 应该都知道吧!10后可能就没听过了接下来,让我隆重介绍本期游戏的主角们,他们就是

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第2张图片

汤姆和杰瑞

左边的灰色小猫名叫Tom汤姆,是一只被主人惯坏了的家猫 

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第3张图片

右边的棕色小老鼠名叫Jerry杰瑞,是汤姆的邻居。

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第4张图片

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第5张图片

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第6张图片

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第7张图片

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第8张图片

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第9张图片

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

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

想领取更多完整源码跟python学习资料可私信我或点击这行字体即可

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第10张图片

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第11张图片

设计思路

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第12张图片

 看完了效果,思考两分钟⏳是不是脑子里已经有了思路,只差一些关键的代码了?

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第13张图片

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

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

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

  3. 用键盘控制杰瑞移动

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

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

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

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

详细步骤

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

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

playground = turtle.Screen()

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第14张图片

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

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. 产生汤姆和杰瑞,随机出现在屏幕上

图片

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

我们就拿杰瑞来举例吧☝

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第15张图片

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

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

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

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

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

3. 用键盘控制杰瑞移动

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

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第16张图片

我们创建一个函数,取名成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)

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!")

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

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

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

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

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

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

【Python小游戏合集】自行开发个猫捉老鼠的小游戏~_第17张图片

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

 完整源码:

import turtle
import time
import random

def up():
    jerry.setheading(90)
    jerry.forward(20)
def down():
    jerry.setheading(270)
    jerry.forward(20)
def left():
    jerry.setheading(180)
    jerry.forward(20)
def right():
    jerry.setheading(0)
    jerry.forward(20)
playground=turtle.Screen()
playground.register_shape('tom.gif')
playground.register_shape('jerry.gif')
playground.onkey(up,'Up')
playground.onkey(down,'Down')
playground.onkey(left,'Left')
playground.onkey(right,'Right')

#监听
playground.listen()

writer=turtle.Turtle()
writer.color('brown')
writer.hideturtle()
writer.penup()
writer.home()
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",20,"bold"))
time.sleep(3)

writer.clear()

tom=turtle.Turtle()
tom.shape('tom.gif')
tom.penup()
tom.goto(random.randint(-200,200),random.randint(-200,200))
tom.pendown()
tom.pensize(3)
tom.color('blue')

jerry=turtle.Turtle()
jerry.shape('jerry.gif')
jerry.speed(0)
jerry.penup()
jerry.goto(random.randint(-200,200),random.randint(-200,200))
jerry.color('brown')

start=time.time()
while True:
    tom.setheading(tom.towards(jerry))
    tom.forward(5)
    if tom.distance(jerry)<10:
        end=time.time()
        playground.clear()
        jerry.goto(0,0)
        jerry.write("GAME OVER",align='center',font=("Comic sans MS",50,"bold"))
        jerry.goto(0,-50)
        jerry.write("YOU SURVIVED {:.1f} SECONDS".format(end-start),align='center',font=("Comic sans MS",20,"bold"))
        tom.pu()
        tom.goto(-50,-70)
        tom.stamp()
        jerry.pu()
        jerry.goto(50,-70)
        jerry.stamp()
        break

end

好了这期猫抓老鼠小游戏就分享到这里了。喜欢的话记得三联噢~~家人们的支持是小编更新最大的动力

你可能感兴趣的:(程序员,Python,python,开发语言,后端)