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

2022年05月14日 阅读数:10
这篇文章主要向大家介绍【Python小游戏合集】自行开发个猫捉老鼠的小游戏~,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

导语:

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

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

🌟汤姆和杰瑞🌟ide

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

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

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

图片

图片

大部分状况下,汤姆的计划都没办法骗过聪明的杰瑞,结果反而让本身吃了苦头🤕字体

图片

图片

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

图片

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

图片

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

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

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

对了☝,若是你尚未看过这个动画片,那可千万别在完成代码前播放哦,真的太好看了,你会入迷的💞

图片

设计思路💡

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

å¾ç

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

图片

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

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

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

  3. 用键盘控制杰瑞移动

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

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

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

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

详细步骤📜

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

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

playground = turtle.Screen()

而文字部分则很简单,以前的文章也有不少例子,使用turtle里的write方法就行了

图片

若是你喜欢个人字体👍,喏,拿去用吧~

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)去下载相关图标,简单省事👌

图片

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

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

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

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

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

3. 用键盘控制杰瑞移动

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

因此首先咱们要建立一系列的键盘指令📑,好比当键盘里的向上按钮被按下时就让杰瑞往上逃跑🏃

图片

咱们建立一个函数,取名成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 # 总时间等于结束减去开始

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

图片

让咱们一块儿伴随着熟悉的配乐,再来感觉一把游戏的乐趣吧!

 完整源码:

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

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