猫捉老鼠游戏

本文阅读 6 分钟
首页 代码,C/C#/C++ 正文
# -*- coding: utf-8 -*-
""" @Time : 2021/12/13 13:26 @Auth : 姓名 @No : 学号 @File : Tom_Jerry.py @IDE : PyCharm """
# 第一步:
# 第一步:引入标准库
# turtle的解释:
# Turtle库是Python语言中一个很流行的绘制图像的函数库,想象为一个小海龟。
# 在一个横轴为x、纵轴为y的坐标系原点,从(0, 0)位置开始,它根据一组函数指令的控制,
# 在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。
import turtle  # 导入画图模块,为了创建一个屏幕(游戏场所)、和画笔(开场效果、两个主角、结束效果)
import time    # 导入时间模块,为了计算猫捉到老鼠用时
import random  # 导入随机包,为了随机的显示tom和jerry的位置



# 第五步:
# 用键盘控制Jerry逃跑
# 定义四个键盘动作:上下左右
# setheading(),从右边开始计算,也就是从右边起是0度,按照逆时针运动
def up():
    jerry.setheading(90)  # 头向上是90°
    jerry.forward(20)  # 每次移动20个像素
def down():
    jerry.setheading(270)  # 头向下是270°
    jerry.forward(20)  # 每次移动20个像素
def left():
    jerry.setheading(180)  # 头向下是180°
    jerry.forward(20)  # 每次移动20个像素
def right():
    jerry.setheading(0)  # 头向右是0°
    jerry.forward(20)  # 每次移动20个像素




# 第二步:
# 第二步:
# 创建一个游戏场所,相当于新建一个屏幕,把这个屏幕给到playground变量。
playground = turtle.Screen()
playground.register_shape("tom.gif")
# 游戏场所里面,创建一个形状,也就是添加tom的图片
playground.register_shape("jerry.gif")
# 游戏场所里面,创建一个形状,也就是添加jerry的图片
playground.register_shape("barrier.gif")
playground.onkey(up, 'Up')  # playground.onkeypress(up, 'Up')
# 游戏场所里面,绑定动作到键盘,当按Up键时候执行事件up(当然也可以绑定到鼠标了,只要用onclick即可)
# 注意1:onkey() | onkeyrelease() :是当键盘按下并释放
# 注意2:而onkeypress() :是当键盘按下
playground.onkey(down, 'Down')  # playground.onkeypress(down, 'Down')
playground.onkey(left, 'Left')  # playground.onkeypress(left, 'Left')
playground.onkey(right, 'Right')    # playground.onkeypress(right, 'Right')

playground.listen()
# 开启监听,才会捕获到我们的按键动作



# 第三步:
# 使用海龟的各种功能,设置游戏开始前的开场效果
writer = turtle.Turtle()
# 定义一个画笔writer
writer.color('brown')
# 设置画笔writer的字体颜色为棕色
writer.hideturtle()
# 隐藏画笔writer的turtle形状,使字体更自然
writer.penup()
# 提起笔移动,不绘制图形,用于另起一个地方绘制
writer.home()
# 设置当前画笔位置为原点,朝向东。
# 写文本的格式:
# turtle.write(s ,[align='对齐方式'][,font=("font-name",font_size,"font_type")])
# 解释1:s为文本内容;
# 解释2:align是对齐方式;align是可选项;
# 解释3:font是字体的参数,分别为字体名称,大小和类型;
# font为可选项,font参数也是可选项。
writer.write("TOM & JERRY", align='center', font=("Comic Sans MS", 50, "bold"))
writer.goto(0, -50)
# 将画笔移动到坐标为x,y的位置
# 可以使用turtle.goto(x,y)方法来让海龟沿着绝对坐标进行运动
# 以屏幕中间为原点(0,0),形成四象限的坐标体系。
writer.write("READY? 3,2,1,GO!", align='center', font=("Comic Sans MS", 23, "bold"))  # 写文本
time.sleep(3)
# 延迟3秒
writer.clear()
# 3秒后,清空turtle窗口,但是turtle的位置和状态不会改变



# 第四步:
# 使用海龟创建tom和jerry这两个主要的游戏角色
tom = turtle.Turtle()
# 定义一个画笔tom
tom.penup()
# 提起笔移动,不绘制图形,用于另起一个地方绘制
tom.goto(random.randint(-200, 200), random.randint(-200, 200))
# 将画笔tom移动到随机位置
tom.pendown()
# 放下画笔,可以把tom猫的运动轨迹记录下来
tom.pensize(3)
# 修改画笔的粗细
tom.color("blue")
# 修改画笔颜色
# 图标库https://www.iconfont.cn/
# 下载tom(cat)和jerry(mouse)的图标,注意要下载32或16像素的图片
# 注意:python的图标只支持gif后缀的图片
# 所以要把下载的png修改以下后缀
# 注意:需要提前在游戏场所里面,创建一个形状,也就是添加jerry的图片
# 然后,才可以调用tom图片
tom.shape('tom.gif')
# 调用tom图标
jerry = turtle.Turtle()
# 定义一个画笔jerry
jerry.penup()
# 提起笔移动,不绘制图形,用于另起一个地方绘制
jerry.goto(random.randint(-200, 200), random.randint(-200, 200))
# 将画笔jerry移动到随机位置
jerry.shape('jerry.gif')
# 调用jerry图标
jerry.speed(0)
# jerry速度调到最快
jerry.color("brown")
# jerry颜色修改为棕色

#以下两个代码是设置障碍物“墙”
barrier1 = turtle.Turtle()
barrier1.penup()
barrier1.goto(random.randint(-200, 200), random.randint(-200, 200))
barrier1.shape('barrier.gif')

barrier2 = turtle.Turtle()
barrier2.penup()
barrier2.goto(random.randint(-200, 200), random.randint(-200, 200))
barrier2.shape('barrier.gif')




# 第六七八步:
# 第六步:控制tom自动追逐
# 第七步:当汤姆追上杰瑞,显示杰瑞被抓住
# 第八步:游戏结束,显示杰瑞逃跑了多少秒,并且把杰瑞和汤姆的图片放到文字的下面
start = time.time()
# 开始追逐的时间
while True:
    tom.setheading(tom.towards(jerry))
    # 使用towards获取jerry的朝向,赋值给tom
    tom.forward(5)  # tom.forward(10)
    # tom每次循环走5个像素,这个数值的大小,直接决定了游戏的难度大小
    barrier1.stamp()
    barrier2.stamp()
    if (tom.distance(jerry) < 3 or barrier1.distance(jerry) < 10 or barrier2.distance(jerry) < 10):     # 4
        # 两者之间的距离若小于3
        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)
        # {:1.f}表示保留小数点后一位
        jerry.write("YOU SURVIVED {:.1f} SECONDS".format(end - start), align='center', font=("Comic Sans MS", 23, "bold"))
        tom.pu()
        # tom猫抬起来
        tom.goto(-50, -70)
        # tom猫移动到该位置,第三象限
        tom.stamp()
        # tom猫打一个印章,也就是印在此处
        jerry.pu()
        # jerry抬起来
        jerry.goto(50, -70)
        # jerry移动到该位置,第四象限
        jerry.stamp()
        # jerry打一个印章,也就是印在此处
        break
        # 跳出循环

turtle.done()  # 避免闪退
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_45555226/article/details/122015895
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复